将 MyBatis 升级为 MyBatis-Plus(简称 MP)是一个平滑过渡的过程,因为 MP 是 MyBatis 的增强工具(而非替代),但仍有一些关键注意事项需要关注,以确保升级后功能兼容且能充分利用 MP 的特性:

1. 依赖管理与版本兼容

  • 替换依赖:移除原 MyBatis 的依赖(如mybatismybatis-spring),引入 MyBatis-Plus 的核心依赖(mybatis-plus-boot-starter 或 mybatis-plus)。
    示例(Maven):
    <!-- 移除旧依赖 -->
    <dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId>
    </dependency><!-- 引入MP依赖 -->
    <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version> <!-- 选择稳定版本,需与Spring Boot版本兼容 -->
    </dependency>
    
  • 版本兼容:确保 MP 版本与 Spring Boot、数据库驱动(如 MySQL Connector)兼容(参考 MP 官方文档的版本适配表)。

2. 核心配置调整

  • SqlSessionFactory 配置
    原 MyBatis 的SqlSessionFactory需替换为 MP 的MybatisSqlSessionFactoryBean(自动集成 MyBatis 的功能,同时添加 MP 增强)。
    若使用 Spring Boot,默认自动配置可无需手动修改;若手动配置,需调整:
    // 旧配置(MyBatis)
    // SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();// 新配置(MP)
    MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
    
  • 全局配置:MP 支持全局配置(如主键策略、驼峰命名映射等),可通过MybatisConfiguration或配置文件(application.yml)设置,替代原 MyBatis 的mybatis-config.xml部分配置。
    示例(YAML):
    mybatis-plus:configuration:map-underscore-to-camel-case: true # 驼峰命名映射(默认开启)global-config:db-config:id-type: AUTO # 全局主键策略(需与数据库主键生成策略匹配)
    

3. Mapper 接口与 XML 适配

  • 继承 BaseMapper:MP 的BaseMapper<T>提供了 CRUD 通用方法(如selectByIdinsert),原有 Mapper 接口可继承它以减少重复代码:

    // 旧:自定义CRUD方法
    public interface UserMapper {User selectById(Long id);int insert(User user);
    }// 新:继承BaseMapper,直接使用通用方法(可保留自定义方法)
    public interface UserMapper extends BaseMapper<User> {// 保留原自定义方法(如复杂查询)List<User> selectByAge(int age);
    }
    

    注意:若原有方法名与BaseMapper冲突(如selectById),需确保逻辑一致,或重命名自定义方法。

  • XML 映射文件
    原有 XML 文件可直接复用,但需注意:

    • 避免与BaseMapper的通用方法重复(如无需再写selectById的 XML 实现);
    • MP 的条件构造器(QueryWrapper)可替代部分动态 SQL,减少 XML 复杂度。

4. 实体类注解适配

MP 通过注解实现实体与数据库表的映射,需在原有实体类上添加必要注解:

  • @TableName("t_user"):指定数据库表名(若类名与表名不一致);
  • @TableId(type = IdType.AUTO):指定主键字段及生成策略(需与全局配置或数据库策略匹配);
  • @TableField("user_name"):指定字段名(若属性名与字段名不一致,或排除非表字段@TableField(exist = false))。

示例:

@TableName("t_user") // 表名
public class User {@TableId(type = IdType.AUTO) // 主键自增private Long id;@TableField("user_name") // 字段名映射private String userName;@TableField(exist = false) // 非表字段private String tempData;
}

5. 插件与扩展功能适配

  • 分页插件:MP 自带分页插件(MybatisPlusInterceptor),替代原 MyBatis 的 PageHelper 等插件,需单独配置:

    java

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 分页插件return interceptor;
    }
    
  • 其他插件:如乐观锁插件(OptimisticLockerInnerInterceptor)、防 SQL 注入插件等,需根据业务需求配置,注意与原有插件的兼容性。

6. 代码生成器与逆向工程

若使用逆向工程生成代码,建议替换为 MP 的AutoGenerator,可一键生成实体、Mapper、Service 等代码,并自动添加 MP 注解和继承关系,减少手动适配成本。

7. 兼容性与测试

  • 自定义 SQL 检查:原有自定义 SQL(尤其是动态 SQL)需测试是否与 MP 兼容,避免因 MP 的 SQL 解析逻辑导致异常。
  • 事务与缓存:MP 完全兼容 MyBatis 的事务管理和缓存机制(一级缓存、二级缓存),但需确认缓存配置是否生效。
  • 批量操作:MP 提供IService接口的批量方法(如saveBatch),性能优于循环单条操作,可逐步替换原有批量逻辑。

8. 避免过度依赖 MP 特性

MP 的增强功能(如条件构造器、通用 CRUD)可提高开发效率,但复杂业务逻辑仍建议使用自定义 SQL,避免因过度依赖框架导致 SQL 可读性下降。

总结

升级的核心是 **“增强而非重构”**:通过替换依赖、调整配置、适配注解,保留原有业务逻辑的同时,逐步引入 MP 的通用功能和插件。关键是确保版本兼容、测试覆盖,并根据团队情况逐步迁移,充分利用 MP 简化开发的优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94200.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94200.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/94200.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openEuler系统中如何将docker安装在指定目录

在 openEuler 中&#xff0c;Docker 的默认数据存储目录为 /var/lib/docker&#xff08;程序文件通常安装在系统默认路径&#xff0c;一般无需修改&#xff09;。若需将 Docker 数据&#xff08;镜像、容器、卷等&#xff09;存储到指定目录&#xff0c;可通过修改 Docker 配置…

2.4 我国金融市场的监管体制

1、国务院金融发展委员会职责 2、中国人民银行职责

PHP - 实例属性访问与静态方法调用的性能差异解析

观察到了一个看似矛盾的现象&#xff1a;实例属性访问更快&#xff0c;但静态方法调用更快。这实际上是两种不同的操作&#xff0c;下面我将详细解释其中的原理和差异。1. 实例属性访问为什么快访问机制class MyClass {public $instanceProp 1; }$obj new MyClass(); $value …

音视频面试题集锦第 31 期

音视频面试题集锦第 31 期&#xff1a; 1、I 帧、P 帧和 B 帧的概念及区别&#xff1f;2、视频编码中的码率控制技术有哪些&#xff1f;3、音频采样参数有哪些&#xff1f;4、RTMP 和 HLS 协议各有什么特点&#xff1f;如何选择&#xff1f;5、WebRTC 中的 ICE、STUN、TURN 各…

企业视频库管理高效策略

内容概要本文全面探讨企业视频库管理的高效策略&#xff0c;旨在帮助组织优化视频资源处理。首先&#xff0c;我们将介绍企业视频库管理的基本概念和核心价值。接着&#xff0c;深入分析智能分类核心技术如何通过AI算法实现视频自动归类。之后&#xff0c;阐述云集成实现路径&a…

WebSocket和跨域问题

WebSocket 特点 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。简单来说&#xff0c;它就像是在客户端和服务器之间建立了一条"专用通道"&#xff0c;双方可以随时主动发送消息给对方&#xff0c;而不需要像HTTP那样总是由客户端发起请求。 同一时间、双向…

微服务-19.什么是网关

一.网关曾经我们的项目是单体项目&#xff0c;前端只需要请求8080端口&#xff0c;就可以获取所有需要的数据和服务并进行渲染。但是拆分成微服务后&#xff0c;会面临几大问题&#xff1a;1.但是现在我们将该单体项目拆分成了微服务项目&#xff0c;每个项目都有自己独立的端口…

从字节码层面剖析以太坊智能合约创建原理

1. 引言 阅读完本文之后&#xff0c;将能理解一下字节码含义&#xff1a; 608060405260405160893803806089833981016040819052601e916025565b600055603d565b600060208284031215603657600080fd5b5051919050565b603f80604a6000396000f3fe6080604052600080fdfea2646970667358221…

typora无需激活版及最新激活版方法!双击安装就能用

介绍 Typora 是一款Markdown编辑器&#xff0c;支持实时预览&#xff0c;所见即所得。跨平台&#xff0c;支持Windows、macOS、Linux。适合写作、笔记、技术文档等。本教程将提供合法安全的安装方案&#xff0c;并解决常见问题&#xff0c;助你高效完成部署&#xff01; 直接…

基于Java、GeoTools与PostGIS的对跖点求解研究

目录 前言 一、对跖点简介 1、地理学定义 2、人生哲学含义 二、对跖点求解 1、Java求解 2、Geotools求解 3、PostGIS求解 4、三种计算方法的对比 5、Leaflet展示对跖点 三、总结 前言 在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;对跖点&#xff08;A…

Linux-函数的使用-编写监控脚本

Linux-函数的使用-编写监控脚本前言一、监控cpu二、采集内存的使用信息三、采集磁盘和分区的使用信息四、显示进程的信息前言 编写监控脚本实现以下功能 监控cpu&#xff0c;内存&#xff0c;磁盘&#xff0c;进程等信息&#xff0c;每隔5分钟记录这些信息到日志文件里perform…

Authelia:开源双因素认证与单点登录解决方案

项目标题与描述 Authelia是一个开源的认证和授权服务器&#xff0c;专注于为应用程序提供双因素认证&#xff08;2FA&#xff09;和单点登录&#xff08;SSO&#xff09;功能。通过Web门户&#xff0c;Authelia能够作为身份和访问管理&#xff08;IAM&#xff09;系统&#xff…

Apache Ozone 介绍与部署使用(最新版2.0.0)

目录 一、软件介绍 二、软件架构 Ozone Manager&#xff08;OM&#xff09; Storage Container Manager&#xff08;SCM&#xff09; Containers Datanodes Storage Containers Recon Recon 和 Ozone Manager Recon 和 Storage Container Manager 三、安装部署 准备…

Review --- Linux

Review — Linux Linux 是一种开源的类 Unix 操作系统内核&#xff0c;广泛应用于服务器、嵌入式设备和个人计算机中。其核心特点是开源、稳定、安全和高度的可定制性。对于大学毕业生而言&#xff0c;掌握 Linux 的基本操作和原理是进入 IT 行业的重要技能之一。 Linux 的基本…

【msyql 】占用硬盘太大 ,那些文件可以清理

从目录内容来看&#xff0c;这台 MySQL 服务器上主要是 xxl-job 调度平台的数据库。占用空间最大的是&#xff1a;24G xxl_job_log.ibd这个文件是 xxl-job 的任务执行日志表&#xff0c;随着时间推移&#xff0c;日志量会非常大。可以清理的文件和方法1. 清理 xxl_job_log 表数…

58 C++ 现代C++编程艺术7-模板友元

C 现代C编程艺术7-模板友元 文章目录C 现代C编程艺术7-模板友元一、基础应用场景 &#x1f9e9;1. 模板类声明友元函数2. 普通类声明模板函数为友元二、模板类互访场景 ⚙️1. 同类模板互访&#xff08;一对一&#xff09;2. 异类模板互访&#xff08;多对多&#xff09;三、高…

Undertow —— JBOSS 的社区版,redhat 下场维护的开源项目,顶顶好用的 Java web server

Undertow JBoss Community Undertow Undertow is a flexible performant web server written in java, providing both blocking and non-blocking API’s based on NIO. Undertow 是一个用 Java 编写的灵活高性能 Web 服务器&#xff0c;提供基于 NIO 的阻塞和非阻塞 API。…

【AI智能体】Dify 搭建业务单据差异核对助手实战详解

目录 一、前言 二、Dify介绍 2.1 Dify 是什么 2.2 Dify 核心特性 2.2.1 Dify特点 2.2.2 Dify 多模型支持 2.2.3 Dify 适应场景 2.2.4 基于Dify 搭建发票识别应用优势 三、Dify 搭建业务单据核对助手实战过程 3.1 前置准备 3.1.1 安装必要的插件 3.2 完整操作步骤 3…

Centos编译安装Python3.10

gcc编译源码包 下载python源码包并解压 wget https://www.python.org/ftp/python/3.10.18/Python-3.10.18.tgz tar -xf Python-3.10.18.tgz cd Python-3.10.18系统编译依赖环境安装 sudo yum install zlib-devel ncurses-devel gdbm-devel nss-devel openssl-devel readline-de…

Maya 3D建模 导入参考图、锁定参考图

1 导入参考图切换到 前视图 或者 侧视图 导入 &#xff08;根据参考图片类别去选择&#xff09;方法1&#xff1a;视图--图像平面--导入图像方法2&#xff1a;直接点 图像平面 备注&#xff1a;误操作导致看不到 解决办法&#xff1a;显示--视口 找对应的2 锁定参考图目的&…