Mybatis-plus官方文档作出说明,仅在原myBatis基础上做出功能增强,性能几乎不受到影响。鉴于此,总结两者明显优缺,做出记录。便于日后学习使用
1、支持ActiveRecord(领域模型模式)
简介:一个模型库对应关系型数据库中的一个表,而模型类的实体只需要继承一个实体,便可对实体进行 常用SQL主键操作。
前提:
效果如下所示:
使用MyBatis-plus后
2、支持自定义模板生成需要的Controller、Service、Mapper
待使用时详述
3、全局修改 SQL执行条件
/**
* 自定义全局操作
*/
public class MySqlInjector extends AutoSqlInjector{
/**
* 扩展inject 方法,完成自定义全局操作
*/
@Override
public void inject(Configuration configuration, MapperBuilderAssistant builderAssistant, Class<?> mapperClass,
Class<?> modelClass, TableInfo table) {
//将EmployeeMapper中定义的deleteAll,处理成对应的MappedStatement对象,加入到configuration对象中。
//注入的SQL语句
String sql = "delete from " +table.getTableName();
//注入的方法名一定要与EmployeeMapper接口中的方法名一致
String method = "deleteAll" ;
//构造SqlSource对象
SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
//构造一个删除的MappedStatement
this.addDeleteMappedStatement(mapperClass, method, sqlSource);
}
}
4、自带分页插件
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
/**
* 注册插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加分页插件
PaginationInnerInterceptor pageInterceptor = new PaginationInnerInterceptor();
// 设置请求的页面大于最大页后操作,true调回到首页,false继续请求。默认false
pageInterceptor.setOverflow(false);
// 单页分页条数限制,默认无限制
pageInterceptor.setMaxLimit(500L);
// 设置数据库类型
pageInterceptor.setDbType(DbType.MYSQL);
interceptor.addInnerInterceptor(pageInterceptor);
return interceptor;
}
}
@Test
void test02() {
// 注意:current的值默认是1,从1开始,不是0。size是每一页的条数。
Page<UserEntity> page = new Page<>(2, 4);
Page<UserEntity> userPage = userMapper.selectPage(page, null);
userPage.getRecords().forEach(System.out::println);
System.out.println("当前页:" + userPage.getCurrent());
System.out.println("总页数:" + userPage.getPages());
System.out.println("记录数:" + userPage.getTotal());
System.out.println("是否有上一页:" + userPage.hasPrevious());
System.out.println("是否有下一页:" + userPage.hasNext());
}