From c9e735522ceb27cebf12c5f1b4bbdad8baf3f2a5 Mon Sep 17 00:00:00 2001 From: yulichang <570810310@qq.com> Date: Thu, 2 Nov 2023 10:03:08 +0800 Subject: [PATCH] readme --- README-zh.md | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 4 +- 2 files changed, 165 insertions(+), 3 deletions(-) create mode 100644 README-zh.md diff --git a/README-zh.md b/README-zh.md new file mode 100644 index 0000000..261dc2d --- /dev/null +++ b/README-zh.md @@ -0,0 +1,164 @@ + +

+ + Mybatis-Plus-Join-Logo + +

+

MyBatis-Plus-Join

+

+ 为简化开发工作、提高生产率而生 +

+

+ + + + + + +
+ + maven + + + + code style + +

+

+对 MyBatis-Plus 多表查询的扩展 | +演示工程 | +使用文档 | +点个Star支持一下吧 (☆▽☆) +

+ +

+QQ群:1022221898 或者 +添加作者微信,备注MPJ,加入微信群 +
+添加作者微信,备注MPJ,加入微信群 +

+ +### 使用文档WIKI + +## 使用方法 + +### 安装 + +- Maven + ```xml + + com.github.yulichang + mybatis-plus-join-boot-starter + 1.4.7.2 + + ``` +- Gradle + ``` + implementation 'com.github.yulichang:mybatis-plus-join-boot-starter:1.4.7.1' + ``` + 或者clone代码到本地执行 mvn install, 再引入以上依赖 +
+ 注意: MyBatis Plus版本需要3.3.0+ +
+ +### 使用 + +* mapper继承MPJBaseMapper (必选) +* service继承MPJBaseService (可选) +* serviceImpl继承MPJBaseServiceImpl (可选) + +### Lambda形式用法(MPJLambdaWrapper) + +#### 简单的连表查询 + +```java +class test { + @Resource + private UserMapper userMapper; + + void testJoin() { + //和Mybatis plus一致,MPJLambdaWrapper的泛型必须是主表的泛型,并且要用主表的Mapper来调用 + MPJLambdaWrapper wrapper = JoinWrappers.lambda(UserDO.class) + .selectAll(UserDO.class)//查询user表全部字段 + .select(UserAddressDO::getTel)//查询user_address tel 字段 + .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(UserDO::getId, 1) + .like(UserAddressDO::getTel, "1") + .gt(UserDO::getId, 5); + + //连表查询 返回自定义ResultType + List list = userMapper.selectJoinList(UserDTO.class, wrapper); + + //分页查询 (需要启用 mybatis plus 分页插件) + Page listPage = userMapper.selectJoinPage(new Page<>(2, 10), UserDTO.class, wrapper); + } +} +``` + +对应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只能查询相同表的字段 +* selectAs() 字段别名查询,用于数据库字段与业务实体类属性名不一致时使用 +* leftJoin() 参数说明 + 第一个参数: 参与连表的实体类class + 第二个参数: 连表的ON字段,这个属性必须是第一个参数实体类的属性 + 第三个参数: 参与连表的ON的另一个实体类属性 +* 默认主表别名是t,其他的表别名以先后调用的顺序使用t1,t2,t3.... +* 条件查询,可以查询主表以及参与连接的所有表的字段,全部调用mp原生的方法,正常使用没有sql注入风险 + +#### 一对多查询 + +```java +class test { + @Resource + private UserMapper userMapper; + + @Test + void testResultMap() { + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(User.class) + .selectAll(UserDO.class) + //对多查询 + .selectCollection(AddressDO.class, UesrDTO::getAddressList) + //对一查询 + .selectAssociation(AddressDO.class, UesrDTO::getAddress) + .leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId); + + List dtoList = userMapper.selectJoinList(UserDTO.class, wrapper); + + //关于对多分页查询 + //由于嵌套结果方式会导致结果集被折叠,因此分页查询的结果在折叠后总数会减少,所以无法保证分页结果数量正确。 + } +} +``` + +MPJLambdaWrapper其他功能 + +* + 一对一,一对多使用 +* 简单的SQL函数使用 +* ON语句多条件支持 +* 其他全部功能请参考使用文档 + +# 使用文档 wiki diff --git a/README.md b/README.md index 9890240..1acaf01 100644 --- a/README.md +++ b/README.md @@ -33,9 +33,7 @@

QQ群:1022221898 或者 -添加作者微信,备注MPJ,加入微信群 -
-添加作者微信,备注MPJ,加入微信群 +添加作者微信,备注MPJ,加入微信群

### 使用文档WIKI