From 77d3722d1f1001ec8cfeff7e70a055b0a466b5a3 Mon Sep 17 00:00:00 2001 From: admin <570810310@qq.com> Date: Fri, 19 Feb 2021 16:29:15 +0800 Subject: [PATCH] 1.0.9 --- README.md | 212 +++++++++--------- .../com/github/yulichang/common/README.md | 8 + 2 files changed, 114 insertions(+), 106 deletions(-) diff --git a/README.md b/README.md index 22be921..2dffd0c 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,10 @@ [goto wiki](https://gitee.com/best_handsome/mybatis-plus-join/wikis) +## 通用连表wrapper + +[点击跳转至使用方法](https://gitee.com/best_handsome/mybatis-plus-join/tree/master/src/main/java/com/github/yulichang/common) + ### 安装 1. 在项目中添加依赖,依赖已经包含了mybatis-plus-boot-starter<3.4.2>
@@ -80,6 +84,108 @@ MPJLambdaQueryWrapper相当于mp的LambdaQueryWrapper MPJQueryWrapper.lambda() ===> MPJLambdaQueryWrapper MPJLambdaQueryWrapper.stringQuery() ===> MPJQueryWrapper +## MPJJoinLambdaQueryWrapper用法 + +#### MPJJoinLambdaQueryWrapper示例 + +#### 简单的3表查询 + +```java +class test { + @Resource + private UserMapper userMapper; + + void testJoin() { + List list = userMapper.selectJoinList(UserDTO.class, + new MPJJoinLambdaQueryWrapper() + .selectAll(UserDO.class) + .select(UserAddressDO::getTel) + .selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress) + .select(AreaDO::getProvince, AreaDO::getCity) + .leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId) + .leftJoin(AreaDO.class, AreaDO::getId, UserAddressDO::getAreaId) + .eq(true, UserDO::getId, 1) + .like(true, UserAddressDO::getTel, "1") + .gt(true, UserDO::getId, 5)); + } +} +``` + +对应sql + +``` +SELECT + t.id, + t.name, + t.sex, + t.head_img, + t1.tel, + t1.address AS userAddress, + t2.province, + t2.city +FROM + user t + LEFT JOIN user_address t1 ON t1.user_id = t.id + LEFT JOIN area t2 ON t2.id = t1.area_id +WHERE ( + t.id = ? + AND t1.tel LIKE ? + AND t.id > ?) +``` + +说明: + +* UserDTO.class 查询结果返回类(resultType) +* selectAll() 查询指定实体类的全部字段 +* select() 查询指定的字段,支持可变参数,同一个select只能查询相同表的字段 + 故将UserAddressDO和AreaDO分开为两个select() +* selectAs() 字段别名查询,用于数据库字段与业务实体类属性名不一致时使用 +* leftJoin() 参数说明 + 第一个参数: 参与连表的实体类class + 第二个参数: 连表的ON字段,这个属性必须是第一个参数实体类的属性 + 第三个参数: 参与连表的ON的另一个实体类属性 +* 默认主表别名是t,其他的表别名以先后调用的顺序使用t1,t2,t3.... +* 条件查询,可以查询主表以及参与连接的所有表的字段,全部调用mp原生的方法,正常使用没有sql注入风险 + +#### 分页查询 + +```java +class test { + @Resource + private UserMapper userMapper; + + void testJoin() { + IPage iPage = userMapper.selectJoinPage(new Page<>(2, 10), UserDTO.class, + new MPJJoinLambdaQueryWrapper() + .selectAll(UserDO.class) + .select(UserAddressDO::getTel) + .selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress) + .select(AreaDO::getProvince, AreaDO::getCity) + .leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId) + .leftJoin(AreaDO.class, AreaDO::getId, UserAddressDO::getAreaId)); + } +} +``` + +对应sql + +``` +SELECT + t.id, + t.name, + t.sex, + t.head_img, + t1.tel, + t1.address AS userAddress, + t2.province, + t2.city +FROM + user t + LEFT JOIN user_address t1 ON t1.user_id = t.id + LEFT JOIN area t2 ON t2.id = t1.area_id +LIMIT ?,? +``` + ## MPJQueryWrapper和MPJLambdaQueryWrapper ### 简单的3表查询 @@ -227,112 +333,6 @@ ORDER BY addr.id DESC ``` -## MPJJoinLambdaQueryWrapper用法 - -MPJJoinLambdaQueryWrapper与上面连个Wrapper不同,是一套新的支持多表的wrapper -MPJQueryWrapper是基于QueryWrapper扩展的MPJLambdaQueryWrapper是基于LambdaQueryWrapper扩展的 -而LambdaQueryWrapper由于泛型约束,不支持扩展成多表的lambdaWrapper - -#### MPJJoinLambdaQueryWrapper示例 - -#### 简单的3表查询 - -```java -class test { - @Resource - private UserMapper userMapper; - - void testJoin() { - List list = userMapper.selectJoinList(UserDTO.class, - new MPJJoinLambdaQueryWrapper() - .selectAll(UserDO.class) - .select(UserAddressDO::getTel) - .selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress) - .select(AreaDO::getProvince, AreaDO::getCity) - .leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId) - .leftJoin(AreaDO.class, AreaDO::getId, UserAddressDO::getAreaId) - .eq(true, UserDO::getId, 1) - .like(true, UserAddressDO::getTel, "1") - .gt(true, UserDO::getId, 5)); - } -} -``` - -对应sql - -``` -SELECT - t.id, - t.name, - t.sex, - t.head_img, - t1.tel, - t1.address AS userAddress, - t2.province, - t2.city -FROM - user t - LEFT JOIN user_address t1 ON t1.user_id = t.id - LEFT JOIN area t2 ON t2.id = t1.area_id -WHERE ( - t.id = ? - AND t1.tel LIKE ? - AND t.id > ?) -``` - -说明: - -* UserDTO.class 查询结果返回类(resultType) -* selectAll() 查询指定实体类的全部字段 -* select() 查询指定的字段,支持可变参数,同一个select只能查询相同表的字段 - 故将UserAddressDO和AreaDO分开为两个select() -* selectAs() 字段别名查询,用于数据库字段与业务实体类属性名不一致时使用 -* leftJoin() 参数说明 - 第一个参数: 参与连表的实体类class - 第二个参数: 连表的ON字段,这个属性必须是第一个参数实体类的属性 - 第三个参数: 参与连表的ON的另一个实体类属性 -* 默认主表别名是t,其他的表别名以先后调用的顺序使用t1,t2,t3.... -* 条件查询,可以查询主表以及参与连接的所有表的字段,全部调用mp原生的方法,正常使用没有sql注入风险 - -#### 分页查询 - -```java -class test { - @Resource - private UserMapper userMapper; - - void testJoin() { - IPage iPage = userMapper.selectJoinPage(new Page<>(2, 10), UserDTO.class, - new MPJJoinLambdaQueryWrapper() - .selectAll(UserDO.class) - .select(UserAddressDO::getTel) - .selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress) - .select(AreaDO::getProvince, AreaDO::getCity) - .leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId) - .leftJoin(AreaDO.class, AreaDO::getId, UserAddressDO::getAreaId)); - } -} -``` - -对应sql - -``` -SELECT - t.id, - t.name, - t.sex, - t.head_img, - t1.tel, - t1.address AS userAddress, - t2.province, - t2.city -FROM - user t - LEFT JOIN user_address t1 ON t1.user_id = t.id - LEFT JOIN area t2 ON t2.id = t1.area_id -LIMIT ?,? -``` - # [wiki](https://gitee.com/best_handsome/mybatis-plus-join/wikis) diff --git a/src/main/java/com/github/yulichang/common/README.md b/src/main/java/com/github/yulichang/common/README.md index c86e8f1..5b14820 100644 --- a/src/main/java/com/github/yulichang/common/README.md +++ b/src/main/java/com/github/yulichang/common/README.md @@ -2,6 +2,14 @@ ### 使用方法 +#### 如需单独使用 请拷贝以下5个类 + +[com.github.yulichang.common.JoinLambdaWrapper](https://gitee.com/best_handsome/mybatis-plus-join/blob/master/src/main/java/com/github/yulichang/common/JoinLambdaWrapper.java) +[com.github.yulichang.common.JoinAbstractWrapper](https://gitee.com/best_handsome/mybatis-plus-join/blob/master/src/main/java/com/github/yulichang/common/JoinAbstractLambdaWrapper.java) +[com.github.yulichang.common.JoinAbstractLambdaWrapper](https://gitee.com/best_handsome/mybatis-plus-join/blob/master/src/main/java/com/github/yulichang/common/JoinAbstractLambdaWrapper.java) +[com.github.yulichang.wrapper.interfaces.Compare](https://gitee.com/best_handsome/mybatis-plus-join/blob/master/src/main/java/com/github/yulichang/wrapper/interfaces/Compare.java) +[com.github.yulichang.wrapper.interfaces.Func](https://gitee.com/best_handsome/mybatis-plus-join/blob/master/src/main/java/com/github/yulichang/wrapper/interfaces/Func.java) + #### 不使用表别名 注解: