方便后期使用分页记录一下
springboot项目+mybatis实现
1.导入java包 pom.xml
<!--集成分页-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
2.PateUtil工具类
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* @author yu
* @version 1.0
* @date 2022/4/11 18:47
*/
public class PateUtil {
public static final String TOTAL = "total";
public static final String DATA = "data";
public static final String PAGE_SIZE ="pageSize";
public static final String TOTAL_PAGE = "totalPage";
public static final String CURR_PAGE = "currPage";
public static PateUtil qryPage(Pageable pageable){
PateUtil pu = new PateUtil();
PageHelper.startPage(pageable.getPageNumber(), pageable.getPageSize());
String orderBy = getOrderBy(pageable.getSort());
if(orderBy != null && !"".equals(orderBy)){
PageHelper.orderBy(orderBy);
}
return pu;
}
private static String getOrderBy(Sort sort) {
Iterator<Sort.Order> iterator = sort.iterator();
StringBuffer sb = new StringBuffer();
while (iterator.hasNext()){
Sort.Order order = iterator.next();
String s = SQLFilter.sqlInject(order.getProperty());
sb.append(s);
sb.append(order.getDirection().isAscending()?"ASC":"DESC");
sb.append(",");
}
if(sb.toString() != null && !"".equals(sb.toString())){
return sb.toString().substring(0,sb.toString().lastIndexOf(","));
}
return null;
}
public Map qryPageData(List list){
PageInfo page = new PageInfo(list);
Map map = new HashMap();
map.put(TOTAL,page.getTotal());
map.put(DATA,page.getList());
map.put(PAGE_SIZE,page.getPageSize());
map.put(TOTAL_PAGE,page.getPages());
map.put(CURR_PAGE,page.getPrePage()+1);
return map;
}
}
3.SQLFilter sql关键字处理工具类
public class SQLFilter {
public static String sqlInject(String str){
if(!StringUtils.isEmpty(str)){
return null;
}
// 去掉 ' | " ; \字符
str = str.replace("'","");
str = str.replace("\"","");
str = str.replace(";","");
str = str.replace("\\","");
// 转换成小写
str = str.toLowerCase();
// 非法字符
String[] keywords = {"master","truncate","insert","select","delete","update","alter","drop"};
// 判断是否包含非法字符
for (String keyword : keywords) {
if(str.indexOf(keyword) != -1){
return null;
}
}
return str;
}
}
4.PageDto分页实体类
@Data
public class PageDto{
@ApiParam(value = "页码")
protected Integer page = 1;
@ApiParam(value = "每页数量")
protected Integer size = 50;
public Pageable pageable(){
return PageRequest.of(page,size);
}
}
5.使用工具分页
@Override
public JsonResult selectTagList(CommonPage dto) {
JsonResult jsonResult = new JsonResult();
Map maps = PateUtil.qryPage(dto.pageable()).qryPageData(getImageList.selectTagList());
}
// getImageList.selectTagList() 查询的sql 正常的写法,后面是业务逻辑就省略了