MyBatis 升级至 MyBatis-Plus 详细步骤

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

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

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

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

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

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


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

    • MyBatis 版本(如 3.5.x)。

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

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

  2. 备份项目

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

  3. 检查兼容性

  • 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: true
        log-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 {
        @Autowired
        private 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 {
        @Override
        public 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 {
        @Autowired
        private UserMapper userMapper;
        
        @Test
        void testSelect() {
            User user = userMapper.selectById(1);
            Assertions.assertNotNull(user);
        }
    }

     2.集成测试

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


总结

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值