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

MyBatis 常用扩展组件详解(含代码示例)


MyBatis 常用扩展组件详解(含代码示例)

在这里插入图片描述


1. MyBatis-Plus

功能:简化 MyBatis 的 CRUD 操作,提供代码生成器、分页插件、条件构造器等功能。
核心类com.baomidou.mybatisplus.core.MybatisPlusInterceptorcom.baomidou.mybatisplus.core.mapper.BaseMapper


代码示例

步骤1:添加依赖

<!-- pom.xml -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3</version>
</dependency>

步骤2:配置分页插件

// 配置类(如 MyBatisConfig.java)
@Configuration
public class MyBatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 分页插件return interceptor;}
}

步骤3:使用 BaseMapper

// UserMapper.java(继承 BaseMapper)
public interface UserMapper extends BaseMapper<User> {// 自定义 SQL 可在此处添加
}// UserServiceImpl.java
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Autowiredprivate UserMapper userMapper;public List<User> listUsers() {return userMapper.selectList(null); // 简化查询}public Page<User> pageUsers(int pageNum, int pageSize) {Page<User> page = new Page<>(pageNum, pageSize);return userMapper.selectPage(page, null); // 分页查询}
}

2. PageHelper

功能:分页插件,支持复杂查询的分页。
核心类com.github.pagehelper.PageHelpercom.github.pagehelper.PageInfo


代码示例

步骤1:添加依赖

<!-- pom.xml -->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.5</version>
</dependency>

步骤2:配置分页插件

// 配置类(如 PageHelperConfig.java)
@Configuration
public class PageHelperConfig {@Beanpublic PageInterceptor pageInterceptor() {return new PageInterceptor();}
}

步骤3:使用分页

// UserService.java
public PageInfo<User> getUsers(int pageNum, int pageSize) {PageHelper.startPage(pageNum, pageSize); // 开启分页List<User> users = userMapper.selectAll();return new PageInfo<>(users); // 封装分页信息
}

3. Dynamic-Datasource

功能:动态数据源切换,支持多数据源(主从分离、读写分离)。
核心类com.baomidou.dynamic.datasource.annotation.DScom.baomidou.dynamic.datasource.provider.DsProvider


代码示例

步骤1:添加依赖

<!-- pom.xml -->
<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.3</version>
</dependency>

步骤2:配置数据源

# application.yml
dynamic:datasource:primary: masterdatasource:master:url: jdbc:mysql://localhost:3306/master_dbusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverslave:url: jdbc:mysql://localhost:3306/slave_dbusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver

步骤3:切换数据源

// Service层使用注解切换数据源
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;@DS("master") // 切换到主库public void saveUser(User user) {userMapper.insert(user);}@DS("slave") // 切换到从库public List<User> listUsers() {return userMapper.selectAll();}
}

4. MyBatis-Spring-Boot-Starter

功能:Spring Boot 与 MyBatis 的集成 starter,简化配置。
核心类org.mybatis.spring.boot.autoconfigure.MyBatisAutoConfiguration


代码示例

步骤1:添加依赖

<!-- pom.xml -->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version>
</dependency>

步骤2:配置 MyBatis

# application.yml
mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.example.entity

步骤3:使用 Mapper

// UserMapper.xml
<select id="selectUserById" resultType="User">SELECT * FROM user WHERE id = #{id}
</select>// UserMapper.java
public interface UserMapper {User selectUserById(Long id);
}// Service层调用
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(Long id) {return userMapper.selectUserById(id);}
}

5. MyBatis-Generator

功能:代码生成器,自动生成 Entity、Mapper、XML 文件。
核心类org.mybatis.generator.api.MyBatisGenerator


代码示例

步骤1:添加依赖

<!-- pom.xml -->
<dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.4.0</version>
</dependency>

步骤2:配置生成器(generatorConfig.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration><context id="DB2Target" targetRuntime="MyBatis3"><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/mydb"userId="root"password="root"></jdbcConnection><javaModelGenerator targetPackage="com.example.entity" targetProject="src/main/java"/><sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/><javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/><table tableName="user" domainObjectplural="User"/></context>
</generatorConfiguration>

步骤3:执行生成命令

// 执行生成器(如 Main.java)
public class MyBatisGenerator {public static void main(String[] args) throws Exception {DefaultShellCallback callback = new DefaultShellCallback(true);ConfigurationParser cp = new ConfigurationParser(callback, null);Configuration config = cp.parseConfiguration(new File("generatorConfig.xml"));MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, null);myBatisGenerator.generate(null);}
}

6. MyBatis-Interceptor

功能:拦截器扩展,实现自定义拦截逻辑(如日志、权限控制)。
核心类org.apache.ibatis.plugin.Interceptor


代码示例

步骤1:创建拦截器

@Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})
public class LoggingInterceptor implements Interceptor {@Overridepublic Object intercept(Invocation invocation) throws Throwable {// 记录查询日志System.out.println("SQL Execution Start");Object result = invocation.proceed();System.out.println("SQL Execution End");return result;}@Overridepublic Object plugin(Object target) {return Plugin.wrap(target, this);}@Overridepublic void setProperties(Properties properties) {}
}

步骤2:注册拦截器

// 配置类(如 MyBatisConfig.java)
@Configuration
public class MyBatisConfig {@Beanpublic Interceptor loggingInterceptor() {return new LoggingInterceptor();}
}

总结表格

组件名称功能核心类适用场景代码关键点
MyBatis-Plus简化 CRUD,分页,代码生成器BaseMapper, MybatisPlusInterceptor快速开发、减少重复代码@TableId, selectPage()
PageHelper分页插件(复杂查询分页)PageHelper, PageInfo需要灵活分页的场景PageHelper.startPage()
Dynamic-Datasource动态数据源切换@DS, DsProvider主从分离、读写分离@DS("master/slave")
MyBatis-Spring-StarterSpring Boot 集成MyBatisAutoConfigurationSpring Boot 项目快速集成 MyBatis@MapperScan, 配置 application.yml
MyBatis-Generator自动生成代码MyBatisGenerator快速生成 Entity、Mapper、XMLgeneratorConfig.xml 配置
MyBatis-Interceptor自定义拦截逻辑(日志/权限)Interceptor需要拦截 SQL 执行或添加公共逻辑实现 intercept() 方法

关键选择建议

  • 快速开发:优先选择 MyBatis-Plus,减少重复代码。
  • 分页需求:根据复杂度选择 PageHelper(灵活分页)或 MyBatis-Plus 分页插件(简单场景)。
  • 多数据源:使用 Dynamic-Datasource 实现动态切换。
  • 代码生成:用 MyBatis-Generator 自动生成基础代码。
  • 扩展功能:通过 Interceptor 实现日志、权限等公共逻辑。
http://www.xdnf.cn/news/2227.html

相关文章:

  • 有源晶振与无源晶振详解:区别、应用与选型指南
  • 计算机视觉中的二值马尔科夫随机场
  • 代码随想录算法训练营第五十九天 | 1.ford算法精讲 卡码网94.城市间货物运输
  • 长短板理论——AI与思维模型【83】
  • 如何在 Windows 10 中使用 WSL 和 Debian 安装 Postgresql 和 Postgis
  • Vue3的内置组件 -实现过渡动画 TransitionGroup
  • 计算机二级MS Office第九套演示文稿
  • 隐私守护者的觉醒——大数据时代,我们如何对抗“透明人”危机?
  • 单链表专题(1)
  • 豆包,Kim,deepseek对比
  • Java——令牌技术
  • Oracle EBS 零金额的AP付款无法过账数据修复
  • 蓝桥杯赛场反思:技术与心态的双重修炼
  • 基于libdxfrw库读取样条曲线并离散为点
  • 在Linux虚拟机下使用vscode,#include无法跳转问题
  • 前端开发中shell的使用场景
  • 部署yolo到k230教程
  • cloud项目同一个服务,执行不同业务需求,nacos进行分组
  • 数据结构之单链表C语言
  • 论人际关系发展的阶段
  • Scratch——第19课 正话反说问题
  • 内存池管理项目——面试题总结
  • Linux基础指令【上】
  • 【信息系统项目管理师】高分论文:论质量管理和进度管理(智慧旅游平台建设项目)
  • springboot + mybatis 需要写 .xml吗
  • Android学习总结之Retrofit篇
  • Spring Boot 参考文档导航手册
  • 神经网络与计算机视觉
  • 创建可执行 JAR 文件
  • Go 语言中的实时交互式编程环境