MyBatisPlus分页查询(分页条件查询另算)
- 业务方法
Page<PageLimit> page = new Page<PageLimit>(1,10);
userNameMapper.findStringUname(page);
//总页数
System.out.println(page.getTotal());
// 当前页
System.out.println(page.getCurrent());
// 一页多少条数据
System.out.println(page.getSize());
// 数据
System.out.println(page.getRecords());
- SQL
<select id="findStringUname" resultType="com.trade.Entity.BO.PageLimit">
SELECT classroom.id, classroom.class_name,classroom.chass_room
FROM `classroom`
</select>
- mapper层
IPage<PageLimit> findStringUname(IPage<PageLimit> limitIPage);
- 配置类
@Configuration
@MapperScan("com.schoole.Mapper")
public class MapperConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
- 实体类
@Component
@TableName("classroom")
public class PageLimit {
@TableId(value = "id")
private Integer id;
@TableField("class_name")
private String className;
@TableField("chass_room")
private String chassRoom;
public PageLimit(Integer id, String className, String classRoom) {
this.id = id;
this.className = className;
this.chassRoom = classRoom;
}
public PageLimit() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getClassRoom() {
return chassRoom;
}
public void setClassRoom(String classRoom) {
this.chassRoom = classRoom;
}
@Override
public String toString() {
return "PageLimit{" +
"id=" + id +
", className='" + className + ''' +
", classRoom='" + chassRoom + ''' +
'}';
}
}
MyBatisPlus多租户saas系统
我们把时间拉回到JDBC时代,当时我们遇到一个关于解析SQL的语法,当时的大体流程是这样的
DriverManager.getconnection连接数据库-->creatStatement/prepareStatement实例化连接-->excuteQuery执行SQL语句-->ResultSet结果集
我们为什么不要上述流程了,反而转向了JSQLParser这个SQL解析库,或者其他的解析库。我个人认为,一方面是ORM的诞生,另一方面就是流关闭与强绑定的原因。
- JsqlParserSupport(没有找到MultiDataPermissionHandler)
public class Tenineter implements DataPermissionHandler {
@Override
public Expression getSqlSegment(Expression where, String mappedStatementId) {
// 执行JSQLParser相关语法
return null;
}
}
- 配置类
@Configuration
@MapperScan("com.trade.Mapper")
public class MapperConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new DataPermissionInterceptor(new Tenineter()));
return interceptor;
}
}
此时基本上完成了,但是有的时候对某个租户要进行单独处理
public class UserName implements TenantLineHandler {
@Override
public Expression getTenantId() {
return null;
}
@Override
public String getTenantIdColumn() {
return null;
}
@Override
public boolean ignoreTable(String tableName) {
return false;
}
}
- 同理进行注册
@Configuration
@MapperScan("com.trade.Mapper")
public class MapperConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor();
tenantLineInnerInterceptor.setTenantLineHandler(new UserName());
interceptor.addInnerInterceptor(tenantLineInnerInterceptor);
interceptor.addInnerInterceptor(new DataPermissionInterceptor(new Tenineter()));
return interceptor;
}
}
下一期,dockerfile部署,frp内网穿透,nginx部署