pageHelper分页工具的使用
pageHelper分页工具的使用
<!-- mybatis分页 开始 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
<!-- mybatis分页 结束 -->
说明
@RequestMapping("/emps")
public String list(@RequestParam(required = false,defaultValue = "1",value = "pn")Integer pn,
Map<String,Object> map){
//引入分页查询,使用PageHelper分页功能
//在查询之前传入当前页,然后多少记录
PageHelper.startPage(pn,5);
//startPage后紧跟的这个查询就是分页查询
List<Employee> emps = employeeService.getAll();
//使用PageInfo包装查询结果,只需要将pageInfo交给页面就可以
PageInfo pageInfo = new PageInfo<>(emps,5);
//pageINfo封装了分页的详细信息,也可以指定连续显示的页数
map.put("pageInfo",pageInfo);
return "list";
}
底层代码实现
@Override
public PageModel<HistoryMonitor> getList(ReceiveParameterModel receiveParameterModel) {
// TODO Auto-generated method stub
PageHelper.startPage(receiveParameterModel.getPage(), receiveParameterModel.getRows());
List<JsonModel> query = receiveParameterModel.getQuery();
Map<String,Object> map = new HashMap<>();
for (JsonModel jsonModel : query) {
if (jsonModel.getValue() != null && jsonModel.getValue() != "") {
map.put(jsonModel.getName(), jsonModel.getValue());
}
}
return new PageModel<>(mapper.getList(map));
}
public interface InstallTrainService extends BaseService<InstallTrain>{
}
import com.cloud.core.model.PageModel;
import com.cloud.core.model.ReceiveParameterModel;
public interface BaseService<T>{
/**
* 根据Id查询实体
* @param id
* @return
*/
T getById(Object id);
/**
* 根据条件查询
* @param receiveParameterModel
* @return
*/
PageModel<T> getList(ReceiveParameterModel receiveParameterModel);
/**
* 插入实体
* @param entity
* @return
*/
T insert(T entity);
/**
* 更新实体
* @param entity
* @return
*/
T update(T entity);
/**
* 更新null值
* @param entity
* @return
*/
T updateNull(T entity) ;
void delete(List<Object> obj);
}
public class InstallTrainServiceImpl extends BaseServiceImpl<InstallTrainMapper,InstallTrain> implements InstallTrainService{
}
import com.cloud.core.model.PageModel;
import com.cloud.core.model.ReceiveParameterModel;
import com.cloud.core.service.BaseService;
import com.cloud.core.util.ExampleUtil;
import com.github.pagehelper.PageHelper;
import org.apache.catalina.User;
import org.springframework.beans.factory.annotation.Autowired;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.entity.Example;
import java.lang.reflect.ParameterizedType;
import java.util.List;
public class BaseServiceImpl<M extends Mapper<T>, T> implements BaseService<T> {
@Autowired
protected M mapper;
public T getById(Object id) {
return mapper.selectByPrimaryKey(id);
}
public PageModel<T> getList(ReceiveParameterModel receiveParameterModel) {
PageModel<T> pageModel = null;
if (receiveParameterModel != null) {
Class<T> clazz = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[1];
Example example = ExampleUtil.getExample(clazz, receiveParameterModel);
if (receiveParameterModel.getPage() == null || receiveParameterModel.getRows() == null) {
Integer total = mapper.selectCountByExample(example);
List<T> list = mapper.selectByExample(example);
pageModel = new PageModel<T>(total, list);
}
if (receiveParameterModel.getPage() != null && receiveParameterModel.getRows() != null) {
PageHelper.startPage(receiveParameterModel.getPage(), receiveParameterModel.getRows());
pageModel = new PageModel<T>(mapper.selectByExample(example));
}
}
return pageModel;
}
public T insert(T entity) {
mapper.insert(entity);
return entity;
}
public T update(T entity) {
mapper.updateByPrimaryKeySelective(entity);
return entity;
}
public T updateNull(T entity) {
mapper.updateByPrimaryKey(entity);
return entity;
}
public void delete(List<Object> obj) {
obj.forEach(ob -> mapper.deleteByPrimaryKey(ob));
}
}
import com.github.pagehelper.PageInfo;
import java.util.List;
public class PageModel<T> {
private Integer total;
private List<T> rows;
public PageModel() {
}
public PageModel(Integer total, List<T> rows) {
this.total = total;
this.rows = rows;
}
public PageModel(List<T> list){
PageInfo<T> pageInfo = new PageInfo<T>(list);
Long tal = pageInfo.getTotal();
total= tal.intValue();
rows = pageInfo.getList();
}
public Integer getTotal() {
return total;
}
public void setTotal(Integer total) {
this.total = total;
}
public List<T> getRows() {
return rows;
}
public void setRows(List<T> rows) {
this.rows = rows;
}
}
public class JsonModel {
private String name;
private String value;
private String type;
}
public class ReceiveParameterModel {
private Integer page;
private Integer rows;
private String sort;
private String order;
private List<JsonModel> query;
private String querystr;
public List<JsonModel> getQuery() {
if (query == null && querystr != null) {
try {
query = JSONArray.parseArray(querystr, JsonModel.class);
} catch (Exception e) {
throw new CntenException(query, "数据转换异常", e.getStackTrace().toString(), e);
}
}
return query;
}
}
import com.cloud.core.model.ReceiveParameterModel;
import org.springframework.boot.autoconfigure.data.web.SpringDataWebProperties;
import tk.mybatis.mapper.entity.Example;
import java.util.Arrays;
import java.util.List;
public class ExampleUtil {
public static<T> Example getExample(Class<T> clazz, ReceiveParameterModel receiveParameterModel) {
Example example = example = new Example(clazz);
if (receiveParameterModel != null) {
List<JsonModel> list = receiveParameterModel.getQuery();
String sort = receiveParameterModel.getSort();
String order = receiveParameterModel.getOrder();
Example.Criteria criteria = example.createCriteria();
if (list != null && list.size() > 0) {
for (JsonModel jsonModel : list) {
//实体类是否存在该字段且字段值不为空
if (jsonModel.getName() != null && jsonModel.getType() != null && StringUtil.isNotEmpty(jsonModel.getValue()) && existsField(clazz, jsonModel.getName())) {
if ("llike".equals(jsonModel.getType()) ) {
criteria.andLike(jsonModel.getName(), "%"+jsonModel.getValue());
continue;
}
if ("rlike".equals(jsonModel.getType()) ) {
criteria.andLike(jsonModel.getName(), jsonModel.getValue()+"%");
continue;
}
if ("like".equals(jsonModel.getType()) ) {
criteria.andLike(jsonModel.getName(), "%"+jsonModel.getValue()+"%");
continue;
}
if ("eq".equals(jsonModel.getType())) {
criteria.andEqualTo(jsonModel.getName(), jsonModel.getValue());
continue;
}
if ("lt".equals(jsonModel.getType())) {
criteria.andLessThan(jsonModel.getName(), jsonModel.getValue());
continue;
}
if ("le".equals(jsonModel.getType())) {
criteria.andLessThanOrEqualTo(jsonModel.getName(), jsonModel.getValue());
continue;
}
if ("gt".equals(jsonModel.getType())) {
criteria.andGreaterThan(jsonModel.getName(), jsonModel.getValue());
continue;
}
if ("ge".equals(jsonModel.getType())) {
criteria.andGreaterThanOrEqualTo(jsonModel.getName(), jsonModel.getValue());
continue;
}
if ("in".equals(jsonModel.getType())) {
criteria.andIn(jsonModel.getName(), getList(jsonModel.getValue()));
continue;
}
}
}
}
if (sort != null) {
if ("asc".equals(order)) {
example.orderBy(sort).asc();
}
if ("desc".equals(order)) {
example.orderBy(sort).desc();
}
}
}
return example;
}
/**
* 判断该实例是否存在该字段
* @param clz
* @param fieldName
* @return
*/
private static boolean existsField(Class clz,String fieldName){
try{
return clz.getDeclaredField(fieldName)!=null;
}
catch(Exception e){
}
if(clz!=Object.class){
return existsField(clz.getSuperclass(),fieldName);
}
return false;
}
/**
* 将字符串转换为集合
* @param string
* @return
*/
private static List<String> getList(String string) {
String[] split = string.split(",");
List<String> strings = Arrays.asList(split);
return strings;
}
}