日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
MybatisPlus與前端分頁(yè)工具結(jié)合實(shí)現(xiàn)

比如說(shuō)前端表單點(diǎn)擊表頭排序,這個(gè)功能我們就可以結(jié)合分頁(yè)插件完成。而且我們現(xiàn)在很多時(shí)候會(huì)開(kāi)發(fā)多端項(xiàng)目,在不同前端使用不同組件適配后端接口的時(shí)候,總可能遇到命名方式不一致的問(wèn)題,比如A前端框架中當(dāng)前頁(yè)叫currPage,B框架中叫page等情況。基于這樣的實(shí)際情況,我們需要對(duì)項(xiàng)目中MybatisPlus的分頁(yè)進(jìn)行一定程度的封裝,讓它能滿足我們不同情況下的實(shí)際需要。

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比宜陽(yáng)網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式宜陽(yáng)網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋宜陽(yáng)地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。

首先是分頁(yè)插件的配置

@Configuration
public class MPConfig {

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

配置好分頁(yè)插件以后MybatisPlus就支持分頁(yè)了,可以使用service的page方法或者mapper的selectPage方法進(jìn)行分頁(yè)。這兩個(gè)方法都需要傳入

com.baomidou.mybatisplus.extension.plugins.pagination.Page對(duì)象,這個(gè)對(duì)象也就是實(shí)際用來(lái)分頁(yè)的參數(shù)對(duì)象了。我們可以在這個(gè)對(duì)象中設(shè)置分頁(yè)的頁(yè)數(shù),每頁(yè)的數(shù)據(jù)數(shù)量,同時(shí)也可以設(shè)置排序的字段、排序的方式。但是排序字段是直接通過(guò)字符串連接的方式填寫在sql中的,所以是存在sql注入的風(fēng)險(xiǎn)的,所以我們需要個(gè)過(guò)濾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注入風(fēng)險(xiǎn):存在SQL注入關(guān)鍵詞[{}] 值[{}]",xss,value);
throw new RuntimeException("請(qǐng)注意,值可能存在SQL注入風(fēng)險(xiǎn)!--->" + 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注入風(fēng)險(xiǎn):存在SQL注入關(guān)鍵詞[{}] 值[{}]",xss,value);
throw new RuntimeException("請(qǐng)注意,值可能存在SQL注入風(fēng)險(xiǎn)!--->" + value);
}
}
}
}

}

com.baomidou.mybatisplus.extension.plugins.pagination.Page這個(gè)分頁(yè)工具只是提供了分頁(yè)的功能,但是并不能很方便的直接拿來(lái)使用,所以我封裝了一個(gè)工具類,用來(lái)通過(guò)我們寫好的配置從參數(shù)中獲取分頁(yè)需要的信息以及配合前端Table排序的參數(shù)信息,并且過(guò)濾了SQL注入

public class Constant {
/**
* 當(dāng)前頁(yè)碼
*/
public static final String PAGE = "page";
/**
* 每頁(yè)顯示記錄數(shù)
*/
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 注入過(guò)濾
SqlUtil.injection(orderField);
// 設(shè)置排序方式
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框架中接收的數(shù)據(jù)格式也有一些差別,我們分頁(yè)方法返回的

com.baomidou.mybatisplus.core.metadata.IPage也不能滿足我們的格式要求。所以根據(jù)實(shí)際情況封裝一個(gè)工具類,用來(lái)返回我們需要的數(shù)據(jù)格式

@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;
}

最后分頁(yè)調(diào)用的時(shí)候就變得簡(jiǎn)單了

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

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

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

網(wǎng)站欄目:MybatisPlus與前端分頁(yè)工具結(jié)合實(shí)現(xiàn)
標(biāo)題URL:http://www.5511xx.com/article/djchpgj.html