# mybatis-extension
**Repository Path**: shengxp_760/mybatis-extension
## Basic Information
- **Project Name**: mybatis-extension
- **Description**: mybatis扩展库,java1.8+;
支持多表关联的查询、更新、删除,复杂条件查询,聚合查询,自定义sql,批量新增;
内置多种mybatis generator常用插件,例如批量新增、分页等。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/shengxp_760/mybatis-extension
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 0
- **Created**: 2021-10-26
- **Last Updated**: 2023-06-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Java, MyBatis
## README
## mybatis-extension
mybatis扩展库,纯mybatis原生支持,可用于辅助mybatis-plus、tk-mybatis或者mybatis-generator使用。
作者:RexSheng,版权所有,违者必究。博客:https://www.cnblogs.com/RexSheng/
环境依赖:
* mybatis>=3.5.2
* jdk>=1.8
* 无其他依赖包及要求
#### features
1. 支持多表自定义join关联查询
2. 支持自定义AND/OR混合条件
3. 支持GROUPBY/HAVING聚合查询
4. 支持自定义sql查询
5. 内置多种mybatis generator常用插件,例如批量新增、分页等
6. 支持批量插入(since1.0.1),更新,删除(since1.2.0)
#### 使用说明(springboot示例)
- 1. pom.xml中添加maven依赖包
``` java
com.github.rexsheng
mybatis-extension
1.7.1
```
- 2. 配置mybatis的mapper依赖包:在启动类或者配置类上加入注解
- 2.1 配置方式一
``` java
//since 1.6.0
@EnableMybatisExtension
```
- 2.1 配置方式二
``` java
@MapperScan(basePackages = {"com.github.rexsheng.mybatis.mapper"})
```
- 3. 配置mybatis拦截器,注意: 使用`@EnableMybatisExtension`方式配置无需此步。自定义SqlSessionFactory时,需要手动添加此拦截器
```
import com.github.rexsheng.mybatis.interceptor.ResultTypeInterceptor;
@Configuration
public class InterceptorConfig {
@Bean
public ResultTypeInterceptor resultTypeInterceptor() {
//默认mysql方言
return new ResultTypeInterceptor();
//ResultTypeInterceptor interceptor=new ResultTypeInterceptor();
//interceptor.setConfig(BuilderConfigurationFactory.builder().dialect(new MySqlDialect()).build());
//return interceptor;
}
}
```
- 4. 开始使用,可直接注入接口DynamicMapper使用
```
import com.github.rexsheng.mybatis.extension.TableQueryBuilder;
import com.github.rexsheng.mybatis.mapper.DynamicMapper;
import com.github.rexsheng.mybatis.test.dto.UserRoleQueryDto;
import com.github.rexsheng.mybatis.test.entity.TUser;
import com.github.rexsheng.mybatis.test.entity.UserRole;
@SpringBootTest
public class MapperTest {
@Autowired
private DynamicMapper dao;
/**
* 单表简单查询
*/
@Test
public void simpleSelect() {
//定义要查询的表的构建器
TableQueryBuilder userQuery=TableQueryBuilder.from(TUser.class);
//定义要查询的字段
userQuery.select(TUser::getUserId,TUser::getUserName).where().like(TUser::getUserName, "%王二小%");
//执行查询
List userList=dao.selectByBuilder(userQuery.build());
log.info("用户列表:{}",userList);
}
/**
* 多表简单关联查询
*/
@Test
public void simpleJoin() {
//定义要查询的主表的构建器
TableQueryBuilder userRoleQuery=TableQueryBuilder.from(UserRole.class);
//定义要查询的从表的构建器
TableQueryBuilder userQuery=TableQueryBuilder.from(TUser.class);
//定义where中的条件
userQuery.selectAll().or().like(TUser::getFirstName, "%管理员%").like(TUser::getLastName, "%管理员%");
//定义要查询主表的字段,指定关联条件
userRoleQuery.distinct().select(UserRole::getRoleId).innerJoin(userQuery).on(UserRole::getUserId, TUser::getUserId);
//执行查询,定义新的返回类
List userList=dao.selectByBuilder(userRoleQuery.build(UserRoleQueryDto.class));
log.info("用户角色列表:{}",userList);
}
}
```
##### v1.7.1 date: 2021/10/27
1. 优化:deprecate TableUpdateBuilder.setValueNull
##### v1.7.0 date: 2021/10/26
1. 新增:TableUpdateBuilder.setValue(String columnName,...)可自定义传入字段名称
2. 新增:where条件中,支持and/or段落形式,可生成如下语句: where (id>999 and age<12 ) or (id<=999 and age>=12)
##### v1.6.2 date: 2021/07/12
1. 优化:linux下启动banner显示
##### v1.6.1 date: 2021/07/06
1. 新增:启动banner
##### v1.6.0 date: 2021/06/13
1. 新增:新的启动方式,启动类只需加入注解@EnableMybatisExtension,可指定参数:数据库类型,mybatisplus表/列名注解支持,自定义配置类
2. 优化:更方便的lambda方法,例如selectAs支持结果类的lambda形式参数
```java
TableQueryBuilder userQuery=TableQueryBuilder.from(TUser.class)
.selectAs(TUser::getUserName,UserInfoDto::getTrueName) //第二个参数为结果类UserInfoDto的字段
.page(4, 10);
List userPagedList=dao.selectByBuilder(userQuery.build(UserInfoDto.class));
```
##### v1.5.2 date: 2021/03/14
1. 优化:deleteByBuilder参数可以传入TableQueryBuilder构造的条件,取消TableDeleteBuilder的强制使用
##### v1.5.1 date: 2021/02/21
1. 修复:update多表时可更新多个表字段
##### v1.5.0 date: 2020/12/22
1. 新增:totalCountDisabled()方法
2. 新增:@ColumnIgnore注解用于忽略字段查询
3. 修复:oracle分页异常问题
##### v1.4.3 date: 2020/12/20
1. 修复:selectAll()时字段乱序问题
2. 修复:字段重载时偶尔无效问题
##### v1.4.2 date: 2020/12/20
1. 修复:排除static与transient修饰的字段
##### v1.4.1 date: 2020/12/18
1. 修复:TableColumnNamePlugin中BLOB类无注解问题
2. 修复:TableColumnNamePlugin中备注字符串换行问题
3. 优化:selectAll()字段时,按照优先父类字段的顺序获取列名
##### v1.4.0 date: 2020/12/11
1. 新增:TableColumnNamePlugin中ColumnName注解 新增字段类型,可指定字段为主键类型
2. 修复:totalCountEnabled(Boolean)参数为true时不继续执行查询的问题
3. 优化:精简selectByBuilder生成的sql,减少不必要的AS关键字
4. 优化:sql中jdbcType增强支持
##### v1.3.1 date: 2020/12/06
1. 修复:ResultTypeInterceptor.setConfig(BuilderConfiguration)调用时的日志显示问题
2. 优化:传入sql参数时支持jdbcType形式。例如:
```java
selectBySqlWithParams("select id from t_user where create_time>#{createTime,jdbcType=TIMESTAMP}",...);
```
##### v1.3.0 date: 2020/11/22
1. 新增:IDatabaseDialect数据库方言接口,针对配置不同数据库的分页及特性
2. 新增(变更): 初始化时使用BuilderConfiguration.setDatabaseDialect(IDatabaseDialect)配置,废弃setDbType(String dbType)、setBeginDelimiter(String beginDelimiter)、setEndDelimiter(String endDelimiter)
3. 新增:totalCountEnabled(Boolean),当某个查询计算总条数为0时,Boolean参数可自定义配置是否继续执行原有查询,优先级高于全局配置IDatabaseDialect.skipSelectIfCountZero()
4. 优化:totalCountEnabled()生成的sql语句
##### v1.2.2 date: 2020/11/15
1. 优化:增强多字段的查询方法selectField,selectExcept
2. 优化:精简生成的查询sql:当返回类型的属性与sql字段相同时,取消语句中的字段AS部分
3. 修复:多表关联 selectCount(*)时异常问题
##### v1.2.1 date: 2020/10/20
1. 修复:修改sqlserver查询时强制分页问题
2. 修复:修改查询时select使用as关键字问题
3. 优化:selectByBuilder无select列时抛出异常
##### v1.2.0 date: 2020/10/17
1. 新增:DynamicMapper批量更新方法updateByBuilder,批量删除方法deleteByBuilder,查询总条数方法countBySql、countBySqlWithParams
2. 新增:tablename注解新增catalog,schema配置
3. 新增:TableColumnNamePlugin新增catalog,schema配置,支持传入属性:注解位置type=ALL/TABLE/COLUMN,备注类型remark=ALL,NONE,FIELD,METHOD
4. 新增:selectByBuilder支持distinct
5. 新增:where条件notIn,notLike
6. 新增:BuilderConfiguration配置maxInLength,自动拆分列表值为or连接的条件,用于解决oracle中in最多1000个值的问题
7. 新增:mbg 注释实现类ExtensionCommentGenerator
8. 优化(变更):BuilderConfiguration中默认beginDelimiter和endDelimiter为空白字符串
9. 优化:BuilderConfiguration中配置ITableHandler,IColumnHanler来获取数据表及列配置
10. 优化:支持sqlserver2012以上使用offset fetch next分页
##### v1.1.1 date: 2020/10/08
1. 新增:DynamicMapper接口sql传参方法selectBySqlWithParams,selectByMapWithParams。
sql里不必再手动拼接参数,写法与xml语法保持一致,支持参数直接传入list自动拆解
2. 优化:删除调试日志
##### v1.1.0 date: 2020/10/05
1. 新增:TableQueryBuilder类新增设置分页方法setPage,新增开启计算总条数方法totalCountEnabled()
2. 新增:mbg分页插件,支持传入page参数,支持只设置pageSize,pageIndex改为非必须
3. 新增:BuilderConfiguration中配置dbType,默认值为"mysql"
4. 修复:批量插入方法不使用配置方法获取列名的问题
5. 优化:调整部分注释
##### v1.0.1 date: 2020/09/28
1. 新增:DynamicMapper接口批量插入方法batchInsert,支持全局配置,示例程序同步增加测试用例
##### v1.0.0 date: 2020/09/01
1. 第一版发布,提供springboot示例程序下载