2.0到3.0主要升级的点:
- 升级 JDK 8 + 优化性能 Wrapper 支持 lambda 语法
- 模块化 MP 合理的分配各个包结构
- 重构注入方法,支持任意方法精简注入模式
- 全局配置下划线转换消灭注入 AS 语句
- 改造 Wrapper 更改为 QueryWrapper UpdateWrapper
- 重构 分页插件 消灭固定分页模型,支持 Mapper 直接返回 IPage 接口
- 新增 Rest Api 通过 Controller 层
- 实体 String 类型字段默认使用 LIKE 查询 SelectOne 默认 LIMIT 1
- 辅助支持 selectMaps 新增 bean map 互转工具类
- 增加 db2 支持 starter 改为 Spring boot 2+ 支持
- 重构生成器提供自定义 DB 多种模板引擎支持
配置项
sqlSessionFactory 配置
2.0
<!--注册SqlSessionFactory-->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<!-- 配置数据源 -->
<property name="dataSource" ref="shardingDataSource"/>
<property name="globalConfig" ref="globalConfig"/>
<!-- 配置 Mybatis 配置文件(可无) -->
<!--<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>-->
<!-- 自动扫描 Xml 文件位置 -->
<!--<property name="mapperLocations" value="classpath:mapper/with-sharding/*Mapper.xml" />-->
<!-- 枚举属性配置扫描,支持通配符 * 或者 ; 分割 -->
<!-- <property name="typeEnumsPackage" value="com.wlqq.insurance.conf.*.enums"/> -->
<property name="plugins">
<array>
<!-- 分页插件配置 -->
<bean id="paginationInterceptor"
class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"/>
<!-- 乐观锁插件 -->
<bean id="optimisticLockerInterceptor"
class="com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor">
</bean>
<!-- 性能拦截器,兼打印sql,不建议生产环境配置-->
<bean id="performanceInterceptor"
class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor"/>
</array>
</property>
</bean>
3.0
<!--注册SqlSessionFactory-->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<!-- 配置数据源 -->
<property name="dataSource" ref="shardingDataSource"/>
<property name="globalConfig" ref="globalConfig"/>
<!-- 配置 Mybatis 配置文件(可无) -->
<!--<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>-->
<!-- 自动扫描 Xml 文件位置 -->
<!--<property name="mapperLocations" value="classpath:mapper/with-sharding/*Mapper.xml" />-->
<!-- 枚举属性配置扫描,支持通配符 * 或者 ; 分割 -->
<!-- <property name="typeEnumsPackage" value="com.wlqq.insurance.conf.*.enums"/> -->
<property name="plugins">
<array>
<!-- 分页插件配置 -->
<bean id="paginationInterceptor"
class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"/>
<!-- 乐观锁插件 -->
<bean id="optimisticLockerInterceptor"
class="com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor">
</bean>
<!-- 性能拦截器,兼打印sql,不建议生产环境配置-->
<bean id="performanceInterceptor"
class="com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor"/>
</array>
</property>
</bean>
全局策略配置
2.0
<!-- 定义 MP 全局策略 -->
<bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
<!-- 主键策略配置 -->
<!-- 可选参数
AUTO->`0`("数据库ID自增")
INPUT->`1`(用户输入ID")
ID_WORKER->`2`("全局唯一ID")
UUID->`3`("全局唯一ID")
-->
<property name="idType" value="0"/>
<!-- 数据库类型配置 -->
<property name="dbType" value="mysql"/>
<!-- 全局表为下划线命名设置 true -->
<property name="dbColumnUnderline" value="true"/>
</bean>
3.0
<!-- 定义 MP 全局策略 -->
<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
<property name="dbConfig">
<bean class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
<!-- 主键策略配置 -->
<!-- 可选参数
AUTO->`0`("数据库ID自增")
INPUT->`1`(用户输入ID")
ID_WORKER->`2`("全局唯一ID")
UUID->`3`("全局唯一ID")
-->
<property name="idType" value="AUTO"/>
<!-- 数据库类型配置 -->
<property name="dbType" value="MYSQL"/>
<!-- 全局表为下划线命名设置 true -->
<property name="tableUnderline" value="true"/>
</bean>
</property>
</bean>
包结构修改
2.0 | 3.0 |
---|---|
com.baomidou.mybatisplus.activerecord.Model | com.baomidou.mybatisplus.extension.activerecord.Model; |
com.baomidou.mybatisplus.annotations.TableField; | com.baomidou.mybatisplus.annotation.TableField; |
com.baomidou.mybatisplus.annotations.TableId; | com.baomidou.mybatisplus.annotation.TableId; |
com.baomidou.mybatisplus.enums.IdType; | com.baomidou.mybatisplus.annotation.IdType; |
com.baomidou.mybatisplus.service.impl.ServiceImpl; | com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
com.baomidou.mybatisplus.mapper.BaseMapper; | com.baomidou.mybatisplus.core.mapper.BaseMapper; |
com.baomidou.mybatisplus.plugins.Page; | com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
Wrapper
删除了EntityWrapper,新增了QueryWrapper、UpdateWrapper、LambdaQueryWrapper、LambdaUpdateWrapper。EntityWrapper可用QueryWrapper来做替换。
2.0
EntityWrapper query = new EntityWrapper();
query.setEntity(RiskPrice.builder().code(code).enabled(true).build());
return dao.selectList(query);
3.0
QueryWrapper<RiskPrice> queryWrapper = new QueryWrapper<>(RiskPrice.builder().code(code).enabled(true).build());
return dao.selectList(queryWrapper);
或者
QueryWrapper<RiskPrice> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("code", code).eq("enabled", true);
return dao.selectList(queryWrapper);
方法
BaseMapper
- 去除了insertAllColumn(T entity),updateAllColumn(T entity)方法
- 新增update(T entity, Wrapper<T> updateWrapper)方法
IService
- insert和insertXXX方法改成了save和saveXXX方法
- deleteXXX改成了removeXXX方法
- 去掉了XXXAllColumnXXX方法
Wrapper
2.0 | 3.0 | 描述 |
---|---|---|
setSqlSelect(String sqlSelect) | select(R... columns); | 设置查询的返回列 |
Wrapper<T>使用
QueryWrapper<T>与UpdateWrapper<T>共有方法
方法名 | 说明 |
---|---|
allEq | 基于 map 内容等于= |
eq | 等于 = |
ne | 不等于 <> |
gt | 大于 > |
ge | 大于等于 >= |
lt | 小于 < |
le | 小于等于 <= |
between | BETWEEN 条件语句 |
notBetween | NOT BETWEEN 条件语句 |
like | LIKE '%值%'' |
notLike | NOT LIKE '%值%' |
likeLeft | LIKE '%值' |
likeRight | LIKE '值%' |
isNull | NULL 值查询 |
isNotNull | NOT NULL 值查询 |
in | IN 查询 |
notIn | NOT IN 查询 |
inSql | IN 查询(sql注入式) |
notInSql | NOT IN 查询(sql注入式) |
groupBy | 分组 GROUP BY |
orderByAsc | ASC 排序 ORDER BY |
orderByDesc | DESC 排序 ORDER BY |
orderBy | 排序 ORDER BY |
having | HAVING 关键词(sql注入式) |
or | or 拼接 |
apply | 拼接自定义内容(sql注入式) |
last | 拼接在最后(sql注入式) |
exists | EXISTS 条件语句(sql注入式) |
notExists | NOT EXISTS 条件语句(sql注入式) |
and(Function) | AND (嵌套内容) |
or(Function) | OR (嵌套内容) |
nested(Function) | (嵌套内容) |
QueryWrapper<T>特有方法
方法名 | 说明 |
---|---|
select | SQL 查询字段内容,例如:id,name,age(重复设置以最后一次为准) |
UpdateWrapper<T>特有方法
方法名 | 说明 |
---|---|
set | SQL SET 字段(一个字段使用一次) |
分页查询
IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);
参考:https://blog.csdn.net/m0_37840000/article/details/81604613