MybatisPlus与前端分页工具结合实现

比如说前端表单点击表头排序,这个功能我们就可以结合分页插件完成。而且我们现在很多时候会开发多端项目,在不同前端使用不同组件适配后端接口的时候,总可能遇到命名方式不一致的问题,比如A前端框架中当前页叫currPage,B框架中叫page等情况。基于这样的实际情况,我们需要对项目中MybatisPlus的分页进行一定程度的封装,让它能满足我们不同情况下的实际需要。

成都创新互联-专业网站定制、快速模板网站建设、高性价比宜阳网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式宜阳网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖宜阳地区。费用合理售后完善,十年实体公司更值得信赖。

首先是分页插件的配置

@Configuration
public class MPConfig {

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}

配置好分页插件以后MybatisPlus就支持分页了,可以使用service的page方法或者mapper的selectPage方法进行分页。这两个方法都需要传入

com.baomidou.mybatisplus.extension.plugins.pagination.Page对象,这个对象也就是实际用来分页的参数对象了。我们可以在这个对象中设置分页的页数,每页的数据数量,同时也可以设置排序的字段、排序的方式。但是排序字段是直接通过字符串连接的方式填写在sql中的,所以是存在sql注入的风险的,所以我们需要个过滤SQL注入工具类,我参考了JeecgBoot中的工具类,稍作修改

@Slf4j
public class SqlUtil {

private final static String xssStr = "'|and |exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |;|or |+";

public static void injection(String value) {
if (value == null || "".equals(value)) {
return;
}
value = value.toLowerCase();
String[] xssArr = xssStr.split("\\|");

for (String xss:xssArr) {
if(value.contains(xss)){
log.error("可能存在SQL注入风险:存在SQL注入关键词[{}] 值[{}]",xss,value);
throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value);
}
}

}

public static void injection(String[] values) {
String[] xssArr = xssStr.split("\\|");
for (String value : values) {
if (value == null || "".equals(value)) {
return;
}
value = value.toLowerCase();

for (String xss:xssArr) {
if(value.contains(xss)){
log.error("可能存在SQL注入风险:存在SQL注入关键词[{}] 值[{}]",xss,value);
throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value);
}
}
}
}

}

com.baomidou.mybatisplus.extension.plugins.pagination.Page这个分页工具只是提供了分页的功能,但是并不能很方便的直接拿来使用,所以我封装了一个工具类,用来通过我们写好的配置从参数中获取分页需要的信息以及配合前端Table排序的参数信息,并且过滤了SQL注入

public class Constant {
/**
* 当前页码
*/
public static final String PAGE = "page";
/**
* 每页显示记录数
*/
public static final String LIMIT = "pageSize";
/**
* 排序字段
*/
public static final String ORDER_FIELD = "prop";
/**
* 排序方式
*/
public static final String ORDER = "order";
/**
* 升序
*/
public static final String ASC = "ascending";

}

public class PageParams extends Page{
public PageParams(Map params){
super(getCurrPage(params),getPageSize(params));

// 排序
String orderField = (String)params.get(Constant.ORDER_FIELD);
String order = (String)params.get(Constant.ORDER);

if(StrUtil.isNotEmpty(orderField) && StrUtil.isNotEmpty(order)){
// SQL 注入过滤
SqlUtil.injection(orderField);
// 设置排序方式
if(Constant.ASC.equals(order)){
addOrder(OrderItem.asc(orderField));
}else {
addOrder(OrderItem.desc(orderField));
}
}
}

public PageParams(){
super(getCurrPage(null),getPageSize(null));
}

private static Long getCurrPage(Map params){
if(params != null && params.get(Constant.PAGE) != null){
return Long.parseLong((String)params.get(Constant.PAGE));
}
return 1L;
}

private static Long getPageSize(Map params){
if(params != null && params.get(Constant.LIMIT) != null){
return Long.parseLong((String)params.get(Constant.LIMIT));
}
return 10L;
}
}

相同的,不同的Table框架中接收的数据格式也有一些差别,我们分页方法返回的

com.baomidou.mybatisplus.core.metadata.IPage也不能满足我们的格式要求。所以根据实际情况封装一个工具类,用来返回我们需要的数据格式

@Data
public class PageResult implements Serializable {

public PageResult(IPage page){
this.page = page.getCurrent();
this.pageSize = page.getSize();
this.total = page.getTotal();
this.rows = page.getRecords();
}

private Long page;
private Long pageSize;
private Long total;
private List rows;
}

最后分页调用的时候就变得简单了

@GetMapping("/list")
public SaResult list(@RequestParam Mapparams){

IPage page = userService.page(new PageParams(params),new LambdaQueryWrapper());

return SaResult.data(new PageResult(page));
}

标题名称:MybatisPlus与前端分页工具结合实现
分享URL:http://www.gawzjz.com/qtweb/news43/183293.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联