1. 通用 Service
MyBatis-Plus 提供了通用的 Service 接口 IService
和其实现类 ServiceImpl
,封装了常见的业务层逻辑,简化开发。
1.1 创建 Service 接口和实现类
-
接口定义:
public interface UserService extends IService<User> { }
-
实现类:
@Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { }
1.2 常用方法
-
查询记录数:
@Test public void testCount() { long count = userService.count(); System.out.println("记录数:" + count); }
-
批量插入:
@Test public void testSaveBatch() { List<User> users = new ArrayList<>(); for (int i = 0; i < 5; i++) { User user = new User(); user.setName("user" + i); user.setAge(20 + i); users.add(user); } userService.saveBatch(users); }
2. 常用注解
MyBatis-Plus 提供了一系列注解,用于简化开发。
2.1 @TableName
-
作用:标识实体类对应的数据库表名。
-
示例:
@TableName("t_user") public class User { private Long id; private String name; private Integer age; private String email; }
-
全局配置表前缀:
mybatis-plus: global-config: db-config: table-prefix: t_
2.2 @TableId
-
作用:标识主键字段。
-
示例:
public class User { @TableId(type = IdType.AUTO) private Long id; private String name; }
-
主键策略:
-
IdType.ASSIGN_ID
:默认,基于雪花算法生成 ID。 -
IdType.AUTO
:数据库自增 ID。
-
2.3 @TableField
-
作用:标识非主键字段,解决字段名不一致问题。
-
示例:
public class User { @TableField("username") private String name; }
2.4 @TableLogic
-
作用:实现逻辑删除。
-
步骤:
-
数据库添加字段
is_deleted
,默认值为 0。 -
实体类添加注解:
java
@TableLogic private Integer isDeleted;
-
测试删除时,实际执行的是更新操作:
sql
UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0
-
3. 条件构造器
MyBatis-Plus 提供了 QueryWrapper
和 LambdaQueryWrapper
用于构建查询条件。
3.1 QueryWrapper
-
示例:
@Test public void testQueryWrapper() { QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.like("name", "a") .between("age", 10, 24) .isNotNull("email"); List<User> users = userMapper.selectList(wrapper); users.forEach(System.out::println); }
3.2 LambdaQueryWrapper
-
示例:
@Test public void testLambdaQueryWrapper() { LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.like(User::getName, "a") .ge(User::getAge, 10) .le(User::getAge, 24); List<User> users = userMapper.selectList(wrapper); users.forEach(System.out::println); }
4. 乐观锁
通过 @Version
注解实现乐观锁。
4.1 实现步骤
-
数据库添加
version
字段。 -
实体类添加注解:
@Version private Integer version;
-
配置乐观锁插件:
@Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; }
5. 多数据源
适用于多库、读写分离等场景。
5.1 配置
spring: datasource: dynamic: primary: master datasource: master: url: jdbc:mysql://localhost:3306/mybatis_plus username: root password: 123456 slave_1: url: jdbc:mysql://localhost:3306/mybatis_plus_1 username: root password: 123456
5.2 使用
-
Service 类注解:
@DS("master") @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { } @DS("slave_1") @Service public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService { }
总结
-
Service:通过
IService
和ServiceImpl
快速实现通用 CRUD。 -
注解:
@TableName
、@TableId
、@TableField
、@TableLogic
简化实体类与表的映射。 -
条件构造器:
QueryWrapper
和LambdaQueryWrapper
灵活构建查询条件。 -
乐观锁:通过
@Version
实现并发控制。 -
多数据源:通过
@DS
注解轻松切换数据源。