Mybatis Common Mapper集成Spring Boot:极速配置指南
【免费下载链接】Mapper Mybatis Common Mapper - Easy to use 项目地址: https://gitcode.com/gh_mirrors/ma/Mapper
引言:告别繁琐配置
你是否还在为MyBatis的XML映射文件编写而烦恼?是否觉得手动实现CRUD操作既重复又容易出错?本文将带你通过Mybatis Common Mapper(以下简称"通用Mapper")与Spring Boot的无缝集成,实现零XML配置、自动化CRUD操作,让数据访问层开发效率提升10倍。
读完本文后,你将掌握:
- 通用Mapper的核心优势与实现原理
- 3分钟极速集成Spring Boot的配置流程
- 高级特性如逻辑删除、乐观锁的实战应用
- 性能优化与常见问题解决方案
核心优势解析
通用Mapper是一款基于MyBatis的增强工具,通过以下机制实现开发效率的飞跃:
核心优势对比
| 特性 | 传统MyBatis | 通用Mapper | 效率提升 |
|---|---|---|---|
| CRUD方法实现 | 手动编写XML/SQL | 继承接口自动生成 | 100% |
| 动态SQL | XML中维护if/where标签 | 注解驱动自动生成 | 80% |
| 数据库兼容性 | 手动适配不同数据库语法 | 内置方言适配 | 90% |
| 代码量 | 每个实体对应XML+接口 | 仅需接口定义 | 95% |
环境准备与版本兼容
系统要求
- JDK 8+
- Spring Boot 2.x/3.x
- MyBatis 3.5.x+
- Maven/Gradle构建工具
版本兼容矩阵
| Spring Boot版本 | 通用Mapper版本 | 推荐依赖 |
|---|---|---|
| 2.0.x - 2.3.x | 2.1.5+ | mapper-spring-boot-starter:2.1.5 |
| 2.4.x - 2.7.x | 2.1.6+ | mapper-spring-boot-starter:2.1.6 |
| 3.0.x+ | 4.2.0+ | mapper-spring-boot-starter:4.2.0 |
极速集成步骤(3分钟完成)
步骤1:添加依赖
在pom.xml中添加以下依赖:
<!-- 通用Mapper Spring Boot Starter -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>4.2.0</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
注意:请根据Spring Boot版本选择正确的通用Mapper版本,避免兼容性问题。
步骤2:配置数据源与Mapper
在application.yml中添加配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml # 如需自定义SQL时配置
type-aliases-package: com.example.entity # 实体类包路径
mapper:
mappers: tk.mybatis.mapper.common.BaseMapper # 基础Mapper接口
not-empty: false # insert/update时是否判断字符串类型!=''
identity: MYSQL # 数据库自增策略
before: true # 主键生成策略执行时机
步骤3:创建实体类
package com.example.entity;
import javax.persistence.*;
import java.time.LocalDateTime;
@Table(name = "sys_user") // 对应数据库表名
public class User {
@Id // 主键标识
@GeneratedValue(strategy = GenerationType.IDENTITY) // 自增策略
private Long id;
@Column(name = "username") // 对应表字段名
private String username;
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
@Column(name = "create_time")
private LocalDateTime createTime;
// Getters and setters
// ...
}
步骤4:定义Mapper接口
package com.example.mapper;
import com.example.entity.User;
import tk.mybatis.mapper.common.BaseMapper;
// 仅需继承BaseMapper即可获得全部CRUD方法
public interface UserMapper extends BaseMapper<User> {
// 无需编写任何方法实现
}
步骤5:Service层使用
package com.example.service.impl;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
public List<User> findAll() {
return userMapper.selectAll(); // 直接调用继承的方法
}
@Override
public User findById(Long id) {
return userMapper.selectByPrimaryKey(id);
}
@Override
public int save(User user) {
return userMapper.insertSelective(user); // 只插入非空字段
}
@Override
public int update(User user) {
return userMapper.updateByPrimaryKeySelective(user); // 只更新非空字段
}
@Override
public int delete(Long id) {
return userMapper.deleteByPrimaryKey(id);
}
}
高级特性实战
逻辑删除实现
通用Mapper通过@LogicDelete注解实现逻辑删除功能,避免数据真正删除:
public class User {
// ...其他字段
@LogicDelete(value = "1", delval = "0") // 1-正常 0-删除
@Column(name = "is_deleted")
private Integer isDeleted;
}
配置文件中添加:
mapper:
logic-delete-value: 0 # 删除值
logic-not-delete-value: 1 # 未删除值
原理示意图:
乐观锁实现
通过@Version注解实现乐观锁控制,解决并发更新冲突:
public class Product {
@Id
private Long id;
private String name;
private Integer stock;
@Version // 乐观锁版本字段
private Integer version;
}
更新时自动附加版本条件:
// 实际执行SQL
UPDATE product
SET name = 'newName', stock = 100, version = version + 1
WHERE id = 1 AND version = 2
批量操作优化
使用MySqlMapper接口提供的批量操作:
import tk.mybatis.mapper.common.MySqlMapper;
public interface UserMapper extends BaseMapper<User>, MySqlMapper<User> {
// 继承后获得批量操作方法
}
// 批量插入示例
List<User> userList = new ArrayList<>();
// 添加用户数据...
userMapper.insertList(userList); // 生成一条INSERT语句插入多条数据
性能优化指南
分页查询优化
通用Mapper结合PageHelper实现高效分页:
// 添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
// 代码中使用
PageHelper.startPage(1, 10); // 第1页,每页10条
List<User> users = userMapper.select(null);
PageInfo<User> pageInfo = new PageInfo<>(users);
分页原理对比:
| 方式 | 实现原理 | 性能 | 适用场景 |
|---|---|---|---|
| 内存分页 | 查全部再截取 | O(n) | 小数据量 |
| 物理分页 | 生成LIMIT/OFFSET | O(1) | 大数据量 |
| PageHelper | 拦截SQL添加分页 | O(1) | 所有场景 |
缓存配置优化
mybatis:
configuration:
cache-enabled: true # 开启一级缓存
local-cache-scope: session # 会话级缓存
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 日志输出
mapper:
cache: true # 开启二级缓存
常见问题解决方案
问题1:字段名与属性名不一致
解决方案1:使用@Column注解显式映射
@Column(name = "user_name")
private String username;
解决方案2:配置驼峰命名转换
mybatis:
configuration:
map-underscore-to-camel-case: true # 自动下划线转驼峰
问题2:多数据源配置冲突
解决方案:使用@MapperScan指定不同数据源的Mapper路径
@Configuration
@MapperScan(basePackages = "com.example.mapper.master", sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
// 配置略
}
@Configuration
@MapperScan(basePackages = "com.example.mapper.slave", sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class SlaveDataSourceConfig {
// 配置略
}
问题3:自定义SQL与通用方法冲突
解决方案:使用@Provider注解自定义SQL
public interface UserMapper extends BaseMapper<User> {
@SelectProvider(type = UserProvider.class, method = "selectByUsername")
User selectByUsername(String username);
class UserProvider {
public String selectByUsername(String username) {
return "SELECT * FROM sys_user WHERE username = #{username}";
}
}
}
项目实战案例
完整项目结构
com.example
├── ExampleApplication.java # 应用入口
├── entity
│ ├── User.java # 用户实体
│ └── Product.java # 产品实体
├── mapper
│ ├── UserMapper.java # 用户Mapper接口
│ └── ProductMapper.java # 产品Mapper接口
├── service
│ ├── UserService.java # 用户服务接口
│ └── impl
│ └── UserServiceImpl.java # 服务实现
└── controller
└── UserController.java # 控制器
核心配置文件
# application.yml完整配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
type-aliases-package: com.example.entity
configuration:
map-underscore-to-camel-case: true
cache-enabled: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper:
mappers: tk.mybatis.mapper.common.BaseMapper,tk.mybatis.mapper.common.MySqlMapper
not-empty: false
identity: MYSQL
before: true
logic-delete-value: 0
logic-not-delete-value: 1
总结与展望
通过本文的指南,我们实现了通用Mapper与Spring Boot的高效集成,主要收获包括:
- 开发效率提升:通过继承接口方式消除90%的重复代码
- 维护成本降低:实体类与数据库表结构变更时仅需修改注解
- 代码质量提升:标准化CRUD操作,减少人为错误
- 性能优化内置:分页、缓存等最佳实践开箱即用
进阶学习路线:
- 通用Mapper源码解析与自定义扩展
- 分布式ID生成策略集成
- 读写分离与分库分表实践
- 与MyBatis-Plus的对比选型
最后,附上项目地址供参考:https://gitcode.com/gh_mirrors/ma/Mapper,建议定期关注官方更新,获取最新特性与安全补丁。
【免费下载链接】Mapper Mybatis Common Mapper - Easy to use 项目地址: https://gitcode.com/gh_mirrors/ma/Mapper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



