当前位置: 首页 > java >正文

MyBatis 升级至 MyBatis-Plus 详细步骤

1. 升级背景与优势
  • MyBatis-Plus 核心优势

    • 内置通用 CRUD,减少重复代码。

    • 强大的条件构造器(QueryWrapperUpdateWrapper)。

    • 分页插件、性能分析插件、乐观锁等开箱即用功能。

    • 代码生成器,快速生成 Entity、Mapper、Service。

  • 适用场景:需要快速开发、减少样板代码的中大型项目。


2. 升级前准备
  1. 确认当前环境

    • MyBatis 版本(如 3.5.x)。

    • 项目框架(Spring Boot 或传统 Spring)。

    • 数据库类型(MySQL、Oracle 等)。

  2. 备份项目

    • 确保代码和数据库备份,防止升级过程中数据丢失。

  3. 检查兼容性

    • 参考 MyBatis-Plus 版本兼容表,选择与当前 MyBatis 和 Spring Boot 兼容的版本。
      示例:

  • Spring Boot 2.x → MyBatis-Plus 3.4.x/3.5.x
  • Spring Boot 3.x → MyBatis-Plus 3.5.3+


3. 依赖替换

     1.移除原有 MyBatis 依赖

<!-- 删除原有依赖 -->
<!-- <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version>
</dependency> -->

      2.添加 MyBatis-Plus 依赖

<!-- Spring Boot 项目 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>
</dependency><!-- 传统 Spring 项目 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.5.3.1</version>
</dependency>

       3.其他可选依赖:

<!-- 代码生成器 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.3.1</version>
</dependency><!-- 分页插件(已包含在 starter 中) -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-extension</artifactId><version>3.5.3.1</version>
</dependency>

4. 配置调整
  1. Spring Boot 配置(application.yml)

    mybatis-plus:configuration:# 保持与原有 MyBatis 配置一致(如日志、驼峰转换)map-underscore-to-camel-case: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 指定 Mapper 扫描路径mapper-locations: classpath*:mapper/**/*.xml# 全局配置global-config:db-config:id-type: auto # 主键策略(自增、UUID 等)logic-delete-field: deleted # 逻辑删除字段logic-delete-value: 1 # 删除标记值logic-not-delete-value: 0 # 未删除标记值

    2.传统 Spring 配置(mybatis-config.xml)

    <configuration><settings><!-- 保持原有 MyBatis 配置 --><setting name="mapUnderscoreToCamelCase" value="true"/></settings><!-- 配置 MyBatis-Plus 插件 --><plugins><plugin interceptor="com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor"/></plugins>
    </configuration>

5. 代码改造
  1. Mapper 接口继承 BaseMapper

    // 原有 MyBatis Mapper
    public interface UserMapper {User selectById(Long id);
    }// 改造为 MyBatis-Plus Mapper
    public interface UserMapper extends BaseMapper<User> {// 原有自定义方法可保留User selectUserDetail(Long id);
    }

    2.实体类添加注解

    @Data
    @TableName("user") // 指定表名(默认类名驼峰转下划线)
    public class User {@TableId(type = IdType.AUTO) // 主键策略private Long id;private String name;@TableField("user_age") // 字段映射private Integer age;@TableLogic // 逻辑删除字段private Integer deleted;
    }

    3.Service 层优化

    // 原有 Service
    public class UserService {@Autowiredprivate UserMapper userMapper;public User getById(Long id) {return userMapper.selectById(id);}
    }// 改造为继承 ServiceImpl
    public interface UserService extends IService<User> {User getUserDetail(Long id);
    }@Service
    public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Overridepublic User getUserDetail(Long id) {return baseMapper.selectUserDetail(id);}
    }

6. 功能迁移与升级

   1.分页功能

  • 原有 PageHelper
PageHelper.startPage(1, 10);
List<User> users = userMapper.selectList();
PageInfo<User> pageInfo = new PageInfo<>(users);
  • MyBatis-Plus 分页
    // 配置分页插件(已包含在 starter 中)
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;
    }// 使用分页
    Page<User> page = new Page<>(1, 10);
    Page<User> userPage = userMapper.selectPage(page, null);

   2.条件查询

  • 原有 XML 动态 SQL

    <select id="selectByCondition" resultType="User">SELECT * FROM user WHERE name LIKE #{name} AND age > #{age}
    </select>
  • MyBatis-Plus QueryWrapper: 
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.like("name", "张").gt("age", 18);
    List<User> users = userMapper.selectList(wrapper);

   3.逻辑删除

  • 原有手动更新

    UPDATE user SET deleted = 1 WHERE id = 1
  • MyBatis-Plus 自动处理: 
    userMapper.deleteById(1); // 自动更新 deleted 字段


7. 代码生成器(可选)
  1. 配置生成器

    public class CodeGenerator {public static void main(String[] args) {FastAutoGenerator.create("jdbc:mysql://localhost:3306/test", "root", "123456").globalConfig(builder -> builder.outputDir("src/main/java").author("YourName")).packageConfig(builder -> builder.parent("com.example")).strategyConfig(builder -> builder.addInclude("user", "order")).execute();}
    }

    2.生成文件

               Entity、Mapper、XML、Service、Controller 自动生成。


8. 注意事项

      1.兼容性问题

  • MyBatis 原生方法(如 selectOne)在 MyBatis-Plus 中行为可能不同,需测试验证。

  • 自定义的 TypeHandler、Interceptor 需检查是否与 MyBatis-Plus 插件冲突。

       2.事务管理

  • 确保 @Transactional 注解和事务管理器配置正常,与 MyBatis-Plus 无冲突。

       3.性能监控

  • 使用 MyBatis-Plus 的 PerformanceInterceptor 监控 SQL 性能:

    @Bean
    public MybatisPlusInterceptor performanceInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PerformanceInnerInterceptor());return interceptor;
    }

9. 测试与验证

      1.单元测试

  • 对 CRUD、分页、条件查询等核心功能进行单元测试。

  • 示例:

    @SpringBootTest
    class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Testvoid testSelect() {User user = userMapper.selectById(1);Assertions.assertNotNull(user);}
    }

     2.集成测试

  • 验证事务、多表操作、复杂查询是否正常。


总结

通过依赖替换、配置调整、代码改造和功能迁移,MyBatis 可平滑升级至 MyBatis-Plus,显著提升开发效率。重点在于合理利用 MyBatis-Plus 的通用 CRUD、条件构造器和代码生成器,同时确保原有业务逻辑兼容性。升级后,结合 MyBatis-Plus 的增强功能,可大幅减少样板代码,提高项目可维护性。


http://www.xdnf.cn/news/1496.html

相关文章:

  • 常用嵌入式软件代码编码规范的关系和覆盖
  • 海康NVR配置NAS-TrueNAS
  • Mysql 简单数据查询
  • 知识储备-后仿
  • AtCoder Beginner Contest 402题解
  • Pillow库中的convert(“L“)彩色图像转换灰度图像详解~
  • 2026《数据结构》考研复习笔记六(串的KMP算法)
  • 【网工第6版】第5章 网络互联⑥
  • 《MySQL:MySQL表的内外连接》
  • 【Redis】redis主从哨兵
  • MySQL常见问题解答
  • 【异常解决】Spring Boot 返回排序后的 Map 但前端接收顺序不对的解决方案
  • C++类与继承
  • SpringBoot中6种自定义starter开发方法
  • 同z科技面经
  • Python爬虫第18节-动态渲染页面抓取之Splash使用上篇
  • Sci期刊的编辑会对投稿论文进行查重吗?
  • 【深度学习与大模型基础】第13章-什么是机器学习
  • CSGO 盲盒开箱系统技术实现深度解析
  • Spring Boot + MyBatis 动态字段更新方法
  • ToDesk远程开机设置指南(适用于HP台式机)
  • 网络安全零基础培训 L1-7 Web基础和CSS渲染
  • C++入门小馆: 探寻vector类
  • 配置 Nginx 的 HTTPS
  • 【已解决】Chrome开发工具栏无法看到React Developer Tools
  • Visium HD多样本拼片拆分
  • 基于 Skynet Cluster 模式的完整案例
  • 【TUST“码蹄杯”编程之星】4.23 每日一题
  • Spring Boot 请求参数接收控制指南
  • 有源晶振波形特性与测量分析