mybatis-plus 2.x升级3.x注意点

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 updateWrapper)方法

IService

  • insert和insertXXX方法改成了save和saveXXX方法
  • deleteXXX改成了removeXXX方法
  • 去掉了XXXAllColumnXXX方法

Wrapper

2.0 3.0 描述
setSqlSelect(String sqlSelect) select(R… columns); 设置查询的返回列

Wrapper使用

QueryWrapper与UpdateWrapper共有方法

方法名 说明
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特有方法

方法名 说明
select SQL 查询字段内容,例如:id,name,age(重复设置以最后一次为准)

UpdateWrapper特有方法

方法名 说明
set SQL SET 字段(一个字段使用一次)

分页查询

IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);

参考:https://blog.csdn.net/m0_37840000/article/details/81604613

发布了203 篇原创文章 · 获赞 145 · 访问量 85万+

猜你喜欢

转载自blog.csdn.net/xiaolyuh123/article/details/103290376