概述
上节主要讲解SpringBoot项目框架搭建,这里不再赘述。内容建立在上节基础上,具体详情地址:http://blog.csdn.net/fjekin/article/details/78407153,本篇介绍MybatisPlus分页和Redis的使用。
分页测试(效果图)
笔者用的接口测试工具是谷歌的apizza,也是蛮强大的。减少文档编写工作量。
分页
排序规则,Order.java
package com.jekin.example.entity.page;
/**
* 数据库排序
*
*
* @Date 2017年5月31日20:48:41
*/
public enum Order {
ASC("asc"), DESC("desc");
private String des;
Order(String des) {
this.des = des;
}
public String getDes() {
return des;
}
public void setDes(String des) {
this.des = des;
}
}
分页结果封装,PageInfoBT.java
package com.jekin.example.entity.page;
import java.util.List;
import com.baomidou.mybatisplus.plugins.Page;
/**
* 分页结果的封装
*
* @author Jekin
* @date 2017年10月31日
*/
public class PageInfoBT<T> {
// 结果集
private List<T> content;
// 总数
private long total;
public PageInfoBT(Page<T> page) {
this.content = page.getRecords();
this.total = page.getTotal();
}
public List<T> getContent() {
return content;
}
public void setContent(List<T> content) {
this.content = content;
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
}
接口请求默认分页配置,PageFactory.java
package com.jekin.example.factory;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.baomidou.mybatisplus.plugins.Page;
import com.jekin.example.entity.page.Order;
/**
* 默认分页
*
* @author Jekin
* @date 2017年10月31日
*/
public class PageFactory<T> {
public Page<T> defaultPage() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
int size = 12;
int current = 0;
if (!StringUtils.isEmpty(request.getParameter("size"))) {
size = Integer.valueOf(request.getParameter("size"));
current = Integer.valueOf(request.getParameter("page"));
} else {
size = 60000;
current = 0;
}
String sort = request.getParameter("sort");
String order = request.getParameter("order");
if (StringUtils.isEmpty(sort)) {
Page<T> page = new Page<>(current, size);
page.setOpenSort(false);
return page;
} else {
Page<T> page = new Page<>(current, size, sort);
if (Order.ASC.getDes().equals(order)) {
page.setAsc(true);
} else {
page.setAsc(false);
}
return page;
}
}
}
使用例子,UserController.java
package com.jekin.example.controller;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.baomidou.mybatisplus.plugins.Page;
import com.jekin.example.entity.ResultInfo;
import com.jekin.example.entity.User;
import com.jekin.example.entity.page.PageInfoBT;
import com.jekin.example.factory.PageFactory;
import com.jekin.example.mapper.UserMapper;
/**
* 分页测试
*
* @author Jekin
* @date 2017年10月31日
*/
@Controller
@RequestMapping(value = "/redis/user")
public class UserController {
@Resource
private UserMapper userMapper;
@RequestMapping("/list")
@ResponseBody
public ResultInfo list(
) {
Page<User> page = new PageFactory<User>().defaultPage();
List<User> result = userMapper.getUserPage(page,
page.getOrderByField(), page.isAsc());
page.setRecords(result);
ResultInfo resultInfo = new ResultInfo(0, "success");
resultInfo.setData(new PageInfoBT<User>(page));
return resultInfo;
}
}
默认,分页参数可不传,ResultInfo是对结果集的包装。
Dao方法,UserMapper.java
List<User> getUserPage(@Param("page") Page<User> page,
@Param("orderByField") String orderByField, @Param("isAsc") boolean isAsc);
映射文件,UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jekin.example.mapper.UserMapper">
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id,type,openid,avatar,account,password,salt,name,birthday,sex,email,phone,roleid,status,createtime,updatetime,balance
</sql>
<resultMap id="BaseResultMap" type="User">
<id column="id" property="id" />
<result column="type" property="type" />
<result column="openid" property="openid" />
<result column="avatar" property="avatar" />
<result column="account" property="account" />
<result column="password" property="password" />
<result column="salt" property="salt" />
<result column="name" property="name" />
<result column="birthday" property="birthday" />
<result column="sex" property="sex" />
<result column="email" property="email" />
<result column="phone" property="phone" />
<result column="roleid" property="roleid" />
<result column="status" property="status" />
<result column="createtime" property="createtime" />
<result column="updatetime" property="updatetime" />
<result column="balance" property="balance" />
</resultMap>
<select id="getUserPage" resultType="User">
select <include refid="Base_Column_List" /> from user where 1 = 1
<choose>
<when test="orderByField != null and orderByField !=''">
<choose>
<when test="isAsc == true">
order by ${orderByField} ASC
</when>
<otherwise>
order by ${orderByField} DESC
</otherwise>
</choose>
</when>
<otherwise>
order by id DESC
</otherwise>
</choose>
</select>
</mapper>
以上重点是PageFactory类,笔者在MP分页辅助类Page上又一次包装,通过HttpServletRequest获取接口参数做初始化工作。关于MP更多内容,可以查看官网地址,笔者建议直接查看源码,里面都有中文注释,比官网介绍的更详细。
Redis缓存
引入jar包,配置地址等参数&