# mybatis-plus-extra
**Repository Path**: qingyu-mo/mybatis-plus-extra
## Basic Information
- **Project Name**: mybatis-plus-extra
- **Description**: 懒人福音,进一步增强mybatis-plus的功能,增加了多表查询,函数查询(例如:sum),子查询, json字段查询(有待完善,现在只有两种方法)。同时也增加了真正的批量插入,批量更新,觉得不错就点个⭐支持一下吧 (☆▽☆)
- **Primary Language**: Java
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2023-03-25
- **Last Updated**: 2025-08-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: MyBatis, SQL, Java, 联表
## README
MyBatis-Plus-Extra
🍬懒人福音,进一步增强mybatis-plus的功能,觉得不错就点个⭐支持一下吧 (☆▽☆)。
-------------------------------------------------------------------------------
[**🌎English Documentation**](README-EN.md)
-------------------------------------------------------------------------------
## 📚简介
`MyBatis-Plus-Extra`在mybatis-plus的基础上进行扩展,增加了多表查询,函数查询(例如:sum),子查询,
json字段查询(有待完善,现在只有两种方法)。同时也增加了真正的批量插入,批量更新。
-------------------------------------------------------------------------------
## 📦使用
### 🍊Maven
在项目的pom.xml的dependencies中加入以下内容:
```xml
io.gitee.qingyu-mo
mybatis-plus-extra
1.0.7.4
```
### ⚙️添加插件
#### spring boot 注解方式:
```jave
@Bean
public MybatisPlusJoinInterceptor mybatisPlusJoinInterceptor() {
return new MybatisPlusJoinInterceptor(new JoinInterceptor());
}
@Bean
public DefaultSqlInjectorPlus mySqlInjector(){
return new DefaultSqlInjectorPlus();
}
```
#### spring xml 注解方式:
```xml
```
### 🔖继承
* mapper继承BaseMapperPlus (必选)
* service继承IServicePlus (可选)
* serviceImpl继承ServiceImplPlus (可选)
### 🔖示例
#### 查询:
```java
xxxService.joinList(JoinWrappers.lambdaQuery()
.leftJoin(A::getId, B::getParentId)
.jSelect() // 查询join的全部属性,默认不查
.eq(A::getId, 1L)
.jEq(B::getParentId, 1L) // 主体为联表而不是主表时,只要使用原本mybatis-plus方法带j即可
.jOrderByAsc(B::getSort)
...
);
// 分页查询
xxxMapper.joinSelectPage(IPage page, JoinWrappers.lambdaQuery()
.sum(B::getPrice) // 查询sum(price)
.rightJoin(B::getParentId, A::getId)
.joinOn(i->i.jEq(A::getXXX, xxx)) // 当联表查询不止一个条件时
.innerJoin(B::getId, C::getId)
.joinOn(i->i.jEq(C::getXXX, xxx)) // 想joinOn哪个联表就写在其连接语句后面
.jChildSelect(D.class, JoinWrappers.lambdaQuery().jEq(xx,xx), alias) // alias值来自于一个子查询
.sumEq(B::getPrice, 1) // 查询B价格总和等于1的记录
.groupBy(B::getXX)
...
);
```
#### 批量新增:
```java
xxxMapper.batchInsert(list); // 覆盖了mybatis-plus的方法,实现真正的批量插入
xxxService.saveBatch(list); // 覆盖了mybatis-plus的方法,实现真正的批量插入
```
#### 批量更新:
```java
xxxMapper.batchUpdateById(list);
xxxService.updateBatchById(list); // 覆盖了mybatis-plus的方法,实现真正的批量更新
xxxMapper.batchUpdateByIdWithNull(list);
xxxService.updateBatchByIdWithNull(list); // mybatis-plus默认不更新null值,想用又只能配某个字段一直可以更新null值
// 此方法配合注解 @UpdateNull 即可实现指定属性在需要时可以更新为null值
```
#### 删除:
```java
xxxMapper.PhysicalDelete(JoinWrappers...);
xxxService.physicalRemove(JoinWrappers...); // 使用了逻辑删除但又想用物理删除
```
#### 查询:
```java
xxxMapper.joinSelectDeletedList(JoinWrappers...);
xxxService.joinDeletedList(JoinWrappers...); // 使用了逻辑删除但又想查询已经被逻辑删除了的记录
```
### 🔖注解
#### IgnoreInsert: 批量插入时忽略此标注属性
#### IgnoreUpdate: 批量更新时忽略此标注属性
#### UpdateNull: 批量更新时标注此属性可以更新为null值
-------------------------------------------------------------------------------
## 🏗️添砖加瓦
### 🎋分支说明
两个分支,功能如下:
| 分支 | 作用 |
|--------|---------------------------------------------------------------|
| master | 主分支,release版本使用的分支,与中央库提交的jar一致,不接收任何pr或修改 |
| develop | 开发分支,默认为下个版本的SNAPSHOT版本,接受修改或pr |
### 🐞提供bug反馈或建议
提交问题反馈请说明正在使用的JDK版本、mybatis-plus版本和相关依赖库版本。
- [Gitee issue](https://gitee.com/qingyu-mo/mybatis-plus-extra/issues)
### 🧬贡献代码的步骤
1. 在Gitee上fork项目到自己的repo。
2. 把fork过去的项目也就是你的项目clone到你的本地。
3. 修改代码(记得一定要修改develop分支)。
4. commit后push到自己的库(develop分支)。
5. 登录Gitee在你首页可以看到一个 pull request 按钮,点击它,填写一些说明信息,然后提交即可。
6. 等待维护者合并。
### 📐PR遵照的原则
欢迎任何人添砖加瓦,贡献代码,不过维护者是一个强迫症患者,为了照顾病人,需要提交的pr(pull request)符合一些规范,规范如下:
1. 注释完备,尤其每个新增的方法应按照Java文档规范标明方法说明、参数说明、返回值说明等信息,如果愿意,也可以加上你的大名。
2. 我们如果关闭了你的issue或pr,请不要诧异,这是我们保持问题处理整洁的一种方式,你依旧可以继续讨论,当有讨论结果时我们会重新打开。