MyBatis-Plus 完全指南:CRUD 不用写 SQL
MyBatis-Plus 是 MyBatis 的增强工具,简化了 CRUD 操作。
快速开始
添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
实体类
@Data
@TableName("users")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}
Mapper
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
CRUD 操作
// 新增
userMapper.insert(user);
// 删除
userMapper.deleteById(1L);
userMapper.deleteBatchIds(Arrays.asList(1, 2, 3));
// 修改
userMapper.updateById(user);
// 查询
User user = userMapper.selectById(1L);
List<User> users = userMapper.selectList(null);
条件构造器
// QueryWrapper
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 25)
.like("name", "张")
.orderByDesc("create_time");
List<User> users = userMapper.selectList(wrapper);
// LambdaQueryWrapper(推荐)
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getAge, 25)
.like(User::getName, "张")
.orderByDesc(User::getCreateTime);
List<User> users = userMapper.selectList(wrapper);
分页查询
// 配置分页插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
// 使用
Page<User> page = new Page<>(1, 10);
Page<User> result = userMapper.selectPage(page, wrapper);
代码生成器
AutoGenerator generator = new AutoGenerator();
generator.setDataSource(new DataSourceConfig()
.setUrl("jdbc:mysql://localhost:3306/demo")
.setUsername("root")
.setPassword("password"));
generator.setPackageInfo(new PackageConfig()
.setParent("com.example"));
generator.execute();
最佳实践
- 使用 LambdaQueryWrapper:类型安全,避免字段名错误
- 分页查询:大数据量必须分页
- 逻辑删除:使用 @TableLogic 实现软删除
- 自动填充:使用 @TableField(fill) 自动填充创建时间等
总结
MyBatis-Plus 简化了 MyBatis 的 CRUD 操作。通过条件构造器和分页插件,可以高效地进行数据库操作。