一、简介
com.baomidou.mybatisplus
是一个开源的 Java 持久层框架。它基于 MyBatis,提供了更强大的功能和更简单的使用方式,使得 Java 开发人员可以更加高效地进行数据库操作。
与原生 MyBatis 相比,MyBatis Plus 提供了大量的注解和类,可以帮助开发人员快速完成代码编写,同时提高代码的可读性和可维护性。此外,它还支持代码自动生成、分页查询、多租户等功能。
二、常用功能
1. 代码自动生成
MyBatis Plus 提供了代码自动生成的功能。只需要通过命令行或者 IDEA 插件生成代码就能快速生成 CRUD 操作相关类和 Mapper 文件。这个功能大大缩短了开发时间,并且保证了代码的可维护性,减少了手写代码的错误。 可以通过以下方式生成代码:
mvn mybatis-plus:generator
2. 分页查询
MyBatis Plus 提供了分页查询的功能。只需要在 Mapper 的方法中传入 Page
对象,就可以在调用查询方法后得到分页结果。
public interface UserMapper extends BaseMapper<User> {
List<User> selectPage(Page<User> page);
}
3. 条件构造器
MyBatis Plus 提供了条件构造器的功能。它可以根据不同的条件快速构造查询语句,支持链式调用,可以快速构造复杂的查询条件。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "jack")
.ge("age", 18)
.orderByDesc("id");
List<User> userList = userMapper.selectList(queryWrapper);
4. 多租户
MyBatis Plus 提供了多租户的支持。可以在查询中快速添加租户的过滤条件,从而实现多租户的数据隔离。 可以通过以下方式配置多租户模式:
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
@Override
public Expression getTenantId() {
return new LongValue(1L);
}
@Override
public String getTenantIdColumn() {
return "tenant_id";
}
@Override
public boolean ignoreTable(String tableName) {
return "sys_user".equals(tableName);
}
}));
return interceptor;
}
}
三、常见问题解决
1. 与 SpringBoot 版本不兼容
在使用 MyBatis Plus 时,可能会出现与 SpringBoot 版本不兼容的问题。此时需要在 pom.xml
里面排除掉相应的依赖,并添加兼容的版本。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
2. 分页查询返回值类型不对
在使用分页查询时,可能会出现返回结果类型不对的问题。此时需要在 Mapper 的方法中添加 @Param
注解,并指定返回类型。
public interface UserMapper extends BaseMapper<User> {
List<User> selectPageVo(Pagination page, @Param("param") UserParam userParam);
}
3. 添加自定义 SQL 语句
在使用 MyBatis Plus 时,可能会出现需要添加自定义 SQL 语句的情况。此时需要在 Mapper 中添加 @SelectProvider
注解,并在对应的 Provider 类中编写 SQL 语句。
public interface UserMapper extends BaseMapper<User> {
@SelectProvider(type = UserSqlProvider.class, method = "getUser")
List<User> getUser(Long id);
}
public class UserSqlProvider {
public String getUser() {
return "SELECT * FROM user WHERE id = #{id}";
}
}
四、总结
总的来说,com.baomidou.mybatisplus
是一个功能强大、易用性高的 Java 持久层框架。它提供了代码自动生成、分页查询、条件构造器、多租户等丰富的功能,可以极大地提高开发效率和代码质量。值得开发人员深入学习和使用。