From e4914429fe997d9d4bfd1448c8d269818d11add2 Mon Sep 17 00:00:00 2001 From: yulichang <570810310@qq.com> Date: Tue, 18 Apr 2023 11:34:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 119 +----------------- .../query/MPJLambdaQueryWrapper.java | 18 +++ 2 files changed, 24 insertions(+), 113 deletions(-) diff --git a/README.md b/README.md index 8c26e5f..9504866 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,14 @@ * 对 mybatis-plus 多表查询的扩展 * 演示工程 -* 文档 +* 插件文档 https://ylctmh.com * 点个Star支持一下吧 :) QQ群:1022221898 -加入微信群 +添加作者微信,备注MPJ,加入微信群 +添加作者微信,备注MPJ,加入微信群 -### 文档 +### 插件文档 https://ylctmh.com ## 使用方法 @@ -48,7 +49,7 @@ class test { void testJoin() { //和Mybatis plus一致,MPJLambdaWrapper的泛型必须是主表的泛型,并且要用主表的Mapper来调用 - MPJLambdaWrapper wrapper = new MPJLambdaWrapper() + MPJLambdaWrapper wrapper = JoinWrappers.lambda(User.class) .selectAll(UserDO.class)//查询user表全部字段 .select(UserAddressDO::getTel)//查询user_address tel 字段 .selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress)//别名 @@ -147,113 +148,5 @@ MPJLambdaWrapper其他功能 * 简单的SQL函数使用 * ON语句多条件支持 -### String形式用法(MPJQueryWrapper) - -#### 简单的连表查询 - -```java -class test { - @Resource - private UserMapper userMapper; - - void testJoin() { - MPJQueryWrapper wrapper = new MPJQueryWrapper() - .selectAll(UserDO.class) - .select("addr.tel", "addr.address", "a.province") - .leftJoin("user_address addr on t.id = addr.user_id") - .rightJoin("area a on addr.area_id = a.id") - .like("addr.tel", "1") - .le("a.province", "1"); - - //列表查询 - List list = userMapper.selectJoinList(UserDTO.class, wrapper); - - //分页查询 (需要启用 mybatis plus 分页插件) - Page listPage = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class, wrapper); - } -} -``` - -对应sql - -``` -SELECT - t.id, - t.name, - t.sex, - t.head_img, - addr.tel, - addr.address, - a.province -FROM - user t - LEFT JOIN user_address addr on t.id = addr.user_id - RIGHT JOIN area a on addr.area_id = a.id -WHERE ( - addr.tel LIKE ? - AND a.province <= ?) -``` - -说明: - -* UserDTO.class 查询结果类(resultType) -* selectAll(UserDO.class) 查询主表全部字段(主表实体类)默认主表别名 "t" -* select() mp的select策略是覆盖,以最后一次为准,这里的策略是追加,可以一直select - 主表字段可以用lambda,会自动添加表别名,主表别名默认是 t ,非主表字段必须带别名查询 -* leftJoin() rightJoin() innerJoin() 传sql片段 格式 (表 + 别名 + 关联条件) -* 条件查询,可以查询主表以及参与连接的所有表的字段,全部调用mp原生的方法,正常使用没有sql注入风险 - -#### 还可以这么操作,但不建议 - -```java -class test { - @Resource - private UserMapper userMapper; - - void testJoin() { - List list = userMapper.selectJoinList(UserDTO.class, - new MPJQueryWrapper() - .selectAll(UserDO.class) - .select("addr.tel", "addr.address") - //行列转换 - .select("CASE t.sex WHEN '男' THEN '1' ELSE '0' END AS sex") - //求和函数 - .select("sum(a.province) AS province") - //自定义数据集 - .leftJoin("(select * from user_address) addr on t.id = addr.user_id") - .rightJoin("area a on addr.area_id = a.id") - .like("addr.tel", "1") - .le("a.province", "1") - .orderByDesc("addr.id")); - } -} -``` - -对应sql - -``` -SELECT - t.id, - t.name, - t.sex, - t.head_img, - addr.tel, - addr.address, - CASE t.sex WHEN '男' THEN '1' ELSE '0' END AS sex, - sum(a.province) AS province -FROM - user t - LEFT JOIN (select * from user_address) addr on t.id = addr.user_id - RIGHT JOIN area a on addr.area_id = a.id -WHERE ( - addr.tel LIKE ? - AND a.province <= ?) -ORDER BY - addr.id DESC -``` - -# wiki - - - +# 插件文档 wiki https://ylctmh.com \ No newline at end of file diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java index d968477..458e58d 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java @@ -54,6 +54,11 @@ public class MPJLambdaQueryWrapper extends AbstractLambdaWrapper ignoreColumns = new ArrayList<>(); + /** + * 是否 select distinct + */ + private boolean selectDistinct = false; + /** * 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity) */ @@ -209,6 +214,15 @@ public class MPJLambdaQueryWrapper extends AbstractLambdaWrapper distinct() { + this.selectDistinct = true; + return typedThis; + } + public String getFrom() { return from.getStringValue(); } @@ -218,6 +232,10 @@ public class MPJLambdaQueryWrapper extends AbstractLambdaWrapper故 sqlSelect selectColumn ignoreColumns from不向下传递