mybatis-plus-join/MAPPING.md
2021-08-13 15:26:00 +08:00

141 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# mybatis-plus-join
* 本页功能只能在1.2.0测试版中使用,最新版本 1.2.0.Beta1
* 点个Star支持一下吧 :)
QQ群:1022221898
## 使用方法
### 安装
- Maven
```xml
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join</artifactId>
<version>1.2.0.Beta1</version>
</dependency>
```
- Gradle
```
implementation group: 'com.github.yulichang', name: 'mybatis-plus-join', version: '1.2.0.Beta1'
```
或者clone代码到本地执行 mvn install, 再引入以上依赖
<br>
注意: mybatis plus version >= 3.4.0
<br>
### 使用
* mapper继承MPJBaseMapper
* service继承MPJBaseService
* serviceImpl继承MPJBaseServiceImpl
#### @MPJMapping注解
UserDO.java
```java
@Data
@TableName("user")
public class UserDO {
@TableId
private Integer id;
private Integer pid;//父id
/* 其他属性略 */
/**
* 一对一
*/
@TableField(exist = false)
@MPJMapping(tag = UserDO.class, thisField = "pid", joinField = "pid")
private UserDO pUser;
/**
* 一对多
*/
@TableField(exist = false)
@MPJMapping(tag = UserAddressDO.class, thisField = "id", joinField = "userId")
private List<UserDO> childUserList;
}
```
使用
```java
/**
* 一对一,一对多关系映射查询
* 映射只对MPJBaseDeepService中的方法有效果 一般以Deep结尾比如 getByIdDeep listByIdsDeep 等
* 如果不需要关系映射就使用mybatis plus原生方法即可比如 getById listByIds 等
*
* @see com.github.yulichang.base.MPJBaseDeepService
*/
@SpringBootTest
class MappingTest {
@Resource
private UserService userService;
/**
* 根据id查询
* <p>
* 查询过程:
* 一共查询了3次
* 第一次查询目标UserDO
* 第二次根据pid查询上级用户
* 第三次根据自身id查询下级用户
*/
@Test
void test1() {
UserDO deep = userService.getByIdDeep(2);
System.out.println(deep);
}
/**
* 查询全部
* <p>
* 查询过程:
* 一共查询了3次
* 第一次查询目标UserDO集合
* 第二次根据pid查询上级用户不会一条记录一条记录的去查询对pid进行汇总用in语句一次性查出来然后进行匹配
* 第三次根据自身id查询下级用户不会一条记录一条记录的去查询对id进行汇总用in语句一次性查出来然后进行匹配
*/
@Test
void test2() {
List<UserDO> list = userService.listDeep();
list.forEach(System.out::println);
}
/**
* 分页查询
* <p>
* 查询过程与上面一致
*/
@Test
void test3() {
Page<UserDO> page = userService.pageDeep(new Page<>(2, 2));
page.getRecords().forEach(System.out::println);
}
}
```
MPJMapping 说明:
* MPJMapping tag 关联实体类
* MPJMapping thisField 当前类关联对应的字段的属性名,可以不填,默认为当前类的主键
* MPJMapping joinField 关联类对应的字段的属性名,可以不填,默认为关联类的主键
* MPJMapping isThrowExp 一对一查询时,如果查询到多条记录是否抛出异常,true:抛出异常,false:获取列表第一条数据
*
更多功能请看代码注释 [MPJMapping](https://gitee.com/best_handsome/mybatis-plus-join/blob/master/src/main/java/com/github/yulichang/annotation/MPJMapping.java)