MybatisPlus与前端分页工具结合实现
虽然MybatisPlus提供了PaginationInnerInterceptor插件用来分页,并且该插件使用起来也还不错,但是我们开发项目的时候总是希望前后端搭配干活,实现一些好用的功能。
比如说前端表单点击表头排序,这个功能我们就可以结合分页插件完成。而且我们现在很多时候会开发多端项目,在不同前端使用不同组件适配后端接口的时候,总可能遇到命名方式不一致的问题,比如A前端框架中当前页叫currPage,B框架中叫page等情况。基于这样的实际情况,我们需要对项目中MybatisPlus的分页进行一定程度的封装,让它能满足我们不同情况下的实际需要。
首先是分页插件的配置@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)); }
有的人以高通芯片性能强于麒麟芯片而感到自豪,你怎么看?苹果手机作的好是!好!高通芯片作的好!是!好!但是!有些人说的时候总给人很自豪的感觉!你是中国人如果所有国人都想这些人一样早就忘国了!爱国和买什么东西无关!和去哪里旅游无关!和支持
为什么移动宽带免费送,很多人还花钱装电信网络?昨天也发了,移动坑人,虚假宣传还价钱高我一直用的联通100m单宽带480每年,移动经常给我打电话送免费宽带,不敢要呀,作为接近20年的移动老用户深知移动套路太多,真没有那么多精力跟
为什么现在这么多人借网贷?我最初的时候只有一张信用卡那时候网贷还不是特别流行我也从来没有想到过有一天我会因为信用卡欠了十多万的债务这其中网贷占了百分之七十信用卡的额度开始并不高我也学着大家刷卡取现额度越来越
随身wifi怎么选择大家一起走进看看httpszhuanlan。zhihu。comp440281203随着5G时代的到来,随身wifi真是被所有人津津乐道的话题!在2008年华为中兴等品牌都陆续推出过随身wifi,销
负责人离职Facebook加密货币前途难料披着羊皮的狼,德国前财政部长当选总理朔尔茨曾这样形容Facebook的加密货币项目。不过现在看来,这匹狼的未来着实有点悬了。且不说全球监管层持续不断的围堵,现在就连项目领头人都打起
对比了十几款词典笔后,我终于找到了性价比最高的那一款一直以来英语都是我的弱项,大学考四六级把我弄得焦头烂额,很多同学当时都考研了,可是因为有英语这门课程我对于考研望而止步,这点成为了我人生的一大遗憾。如今的我已经成为一个宝妈,对于孩
教你如果选择安防监控现在国内基本村村通网,给自己家里装个监控的想法的人也越来越多,那么该怎么买,怎么选?是大家所关心的事了,首先是品牌,比如海康大华参数实标但价格是比较贵的,剩下的比如天视通,捷高,小
iPhone14大曝光,早买iPhone13的肠子都悔青了吗?这是个啥问题?觉得好再换呗穷人的问题,没必要回答居然出到14了?终于能用我媳妇的6s了一能买13的,都是经济情况比较好的。二早买,早用,不存在悔青的情况,大部分是这样。三14有它的
刚刚签约,小米汽车总部落户北京经开区11月27日,北京经济技术开发区管委会与小米科技签约仪式举行,随着双方签订合作协议,正式宣告小米汽车落户北京经开区。该项目将建设小米汽车总部基地和销售总部研发总部,将分两期建设年产
司马南遭受到死亡威胁和围攻,威胁者被抓到会被判刑吗?支持敢于顶住压力为国为民代言的司马老师!我们的社会需要这样敢于为民发声的勇士!相信大多数民众都是你坚强的后盾!若有人或势力敢给司马老师玩阴的来害他,我们大多数民众必不放过之,虽远必
联想事件企业家的原罪,该如何救赎?全国网民不是针对联想,而是让杨柳二人,个人做个合理媒体解释。但二人硬是把私人问题,转移到联想,不得不让网民更加联想!他们的不发言,总不能让全体网民背弃联想多年的广告语吧!人类失去联