以下是MyBatis-Plus的完整使用示例手册,涵盖从环境搭建到核心功能的实现,结合多个实际场景代码示例:
一、环境准备与依赖引入
-
开发环境
- Spring Boot 项目(需配置JDK 1.8+、Maven)
- MySQL数据库(建议字符集
utf8mb4
,支持表情存储)
-
Maven依赖
在
pom.xml
中添加:xml<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> <!-- 最新版本以官网为准 --> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency>
二、配置文件(application.yml)
yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启SQL日志
global-config:
db-config:
id-type: auto # 主键自增策略
logic-delete-field: isDelete # 全局逻辑删除字段
logic-delete-value: 1 # 逻辑删除值
logic-not-delete-value: 0 # 未删除值
三、实体类与Mapper接口
-
实体类示例(User)
java@Data // Lombok注解,自动生成getter/setter @TableName("user") // 指定表名 public class User { @TableId(type = IdType.AUTO) // 自增主键 private Long id; private String name; private Integer age; private String email; @TableLogic // 逻辑删除字段(可选,需配合全局配置) private Integer isDelete; }
-
Mapper接口
java@Mapper // 或使用@Repository注解 public interface UserMapper extends BaseMapper<User> { // 无需额外方法,继承BaseMapper即可获得CRUD能力 }
四、核心功能实现
1. 基础CRUD操作
java
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
// 插入
public void insertUser() {
User user = new User();
user.setName("Alice");
user.setAge(25);
userMapper.insert(user); // 返回影响行数
}
// 查询(按ID)
public User getUserById(Long id) {
return userMapper.selectById(id);
}
// 更新
public void updateUser(User user) {
user.setAge(30);
userMapper.updateById(user); // 根据ID更新
}
// 删除
public void deleteUser(Long id) {
userMapper.deleteById(id);
}
}
2. 条件查询与LambdaWrapper
java
// 查询年龄 > 20 且名字包含 "Tom" 的用户
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", 20).like("name", "Tom");
List<User> list = userMapper.selectList(wrapper);
// Lambda写法(避免硬编码字段名)
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.gt(User::getAge, 20).like(User::getName, "Tom");
List<User> list2 = userMapper.selectList(lambdaWrapper);
3. 分页查询
java
// 配置分页插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
// 使用分页
Page<User> page = new Page<>(1, 10); // 当前页=1,每页大小=10
Page<User> result = userMapper.selectPage(page, null);
List<User> users = result.getRecords(); // 获取分页数据
long total = result.getTotal(); // 总记录数
4. 逻辑删除
- 全局配置 :在
application.yml
中设置logic-delete-field
和值。 - 实体类字段 :添加
@TableLogic
注解(3.3.0+版本可省略)。 - 效果 :执行
deleteById
时会自动将isDelete
设为1,而非物理删除。
五、高级特性
1. 代码生成器
java
// 使用代码生成器生成Entity、Mapper、Service、Controller
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
通过mybatis-plus:codegenerator
配置或工具类一键生成。
2. 乐观锁与版本控制
在实体类中添加@Version
字段:
java
@Version // 乐观锁字段
private Integer version;
更新时会自动检查版本一致性,避免并发冲突。
3. 自动填充公共字段
java
// 实现MetaObjectHandler接口
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// 自动填充创建时间
this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
// 自动填充更新时间
this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
}
}
六、完整示例流程
-
启动类
java@SpringBootApplication @MapperScan("com.example.mapper") // 扫描Mapper接口 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
-
Controller层
java@RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; // 新增用户 @PostMapping public String addUser(@RequestBody User user) { userService.insertUser(); return "Success"; } // 分页查询 @GetMapping public List<User> getUsers(@RequestParam int pageNum, @RequestParam int pageSize) { return userService.getUsers(pageNum, pageSize); } }
七、注意事项
- 版本兼容性:不同版本的MyBatis-Plus可能存在API差异,需参考官方文档。
- SQL日志 :通过
log-impl
配置查看执行SQL,方便调试。 - 动态数据源 :如需多数据源,引入
dynamic-datasource-spring-boot-starter
并配置。
以上内容覆盖了MyBatis-Plus的核心功能和使用场景,更多细节可参考官方文档及示例仓库。