成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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<T> extends Page<T>{
public PageParams(Map<String,Object> 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<String,Object> params){
if(params != null && params.get(Constant.PAGE) != null){
return Long.parseLong((String)params.get(Constant.PAGE));
}
return 1L;
}

private static Long getPageSize(Map<String,Object> 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 Map<String,Object>params){

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

return SaResult.data(new PageResult(page));
}
責任編輯:姜華 來源: 今日頭條
相關推薦

2024-03-28 00:00:00

2021-07-09 06:40:59

TektonArgo CD GitOps

2011-05-18 14:49:53

MySQL分頁

2016-09-29 09:57:08

JavascriptWeb前端模板

2017-07-26 14:50:37

前端模板

2010-01-22 18:08:18

VB.NET與GDI結

2010-09-01 15:28:11

CSSexpression

2011-05-20 16:56:11

VB.NETGDI

2015-06-10 16:53:57

2025-04-27 01:05:00

AI智能日志

2023-12-29 07:04:28

Go項目Docker編寫

2010-08-26 15:36:30

DHCP路由

2009-06-23 17:54:41

OSGi與JSF

2022-05-31 08:04:30

前端設計模式

2023-08-28 15:56:54

2019-11-14 09:00:00

前端測試工具框架

2009-09-17 09:24:57

Linq實現分頁

2012-04-11 13:44:45

ibmdw

2015-10-16 18:03:25

Docker分布式CoreOS

2023-12-07 07:02:00

大倉權限設計
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久一区二区三区四区五区 | 国产丝袜一区二区三区免费视频 | 2019天天操| 黄色片免费| 在线观看中文字幕dvd播放 | 国产电影一区二区三区爱妃记 | 精品av久久久久电影 | av福利网站| 国产不卡在线播放 | 国产精品久久久久一区二区三区 | 亚洲黄色在线免费观看 | 午夜视频精品 | 99精品国产一区二区青青牛奶 | 国产日韩一区二区三免费高清 | 奇米四色影视 | 欧美精品一区二区三区四区五区 | 午夜小视频在线播放 | 国产精品网址 | 亚洲成人观看 | 韩国久久精品 | 国产在线中文字幕 | 日韩一区二区三区视频 | 91在线观看网址 | 久久夜视频 | 欧美一级高清片 | 精品久久久久久亚洲综合网 | 国产一级一级毛片 | 久久久久国产 | 欧美精品一区在线 | 成人欧美一区二区三区黑人孕妇 | 国产精品久久久久久久久图文区 | 亚洲精品一区在线观看 | 欧美日韩中文在线 | 亚洲免费精品 | 亚洲一区二区三区在线 | 国产精品日韩欧美一区二区三区 | 人人看人人草 | 人人干人人草 | 国产成人99久久亚洲综合精品 | 亚洲天天干 | 亚洲一区二区欧美 |