这篇“SSM如何实现分页查询功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SSM如何实现分页查询功能”文章吧。
具体如下:
1. 首先创建一个分页的实体类
public class Flexigrid { //符合条件总记录数 private int total; //当前查询的第几页数据 private int page; //总页数 private int totalPage; //每页查询结果结束序号 @JSONField(serialize=false) private int rowEnd; //每页查询结果开始序号 @JSONField(serialize=false) private int rowStart; //每页结果数 private int rp; //查询条件 @JSONField(serialize=false) private Object obj; //返回结果 @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) private List<?> rows; //......其他get、set方法 public int getTotalPage() { if(rp == 0) return 1; // 提取信息行数 int total = this.total; this.totalPage = total / rp; int mod = total % this.rp; if (mod != 0) this.totalPage += 1; return totalPage; } }
2. Controller ,student对象接收参数,并将对象作为查询参数存入Flexigrid对象中。
@Controller@RequestMapping("/student")public class StudentController { @RequestMapping(value = "/page") @ResponseBody public Flexigrid page(@RequestBody Student student) { Flexigrid flex = new Flexigrid(); flex.setObj(student); // 设置查询参数 flex.setPage(student.getPageNo()); //查询的第几页数据 flex.setRp(student.getPageSize()); //每页结果数 flex.setRowStart((flex.getPage() - 1) * flex.getRp()); //查询结果开始序号 flex.setRowEnd(flex.getPage() * flex.getRp()); //查询结果结束序号 List list = studentService.page(flex); //查询的结果集 int total = studentService.total(flex); //符合查询条件的总记录数 flex.setTotal(total); flex.setRows(list); flex.setObj(null); //将查询条件置为空 return flex; } }
3. service 提供page 和total方法
@Service@Transactional(readOnly = true)public class StudentService { /** * 查询分页数据 * @param flex 包含查询条件以及分页数据 * @return */ public List page(Flexigrid flex) { return studentDao.page(flex); } /** * 获取查询信息总数量 * @param flex 包含查询条件以及分页数据 * @return */ public Integer total(Flexigrid flex) { return studentDao.total(flex); } }
4. dao层定义接口
@MyBatisDaopublic interface StudentDao{ /** * 查询分页数据 * @param flex 包含查询条件以及分页数据 * @return */ List<Student> page(Flexigrid flex); /** * 获取查询信息总数量 * @param flex 包含查询条件以及分页数据 * @return */ Integer total(Flexigrid flex); }
5. 创建映射文件。
namespace属性值改为上面定义接口的类的全名称。
每一个接口方法对应一个sql,且sql-id需要与接口方法名称保持一致。
接口方法的请求参数对应sql的parameterType属性。
编写sql-id为page、total的sql 语句。
<?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指向dao接口 --><mapper namespace="com.dao.StudentDao" > <!-- 信息个数提取 --> <select id="total" resultType="int" parameterType="com.entity.Flexigrid"> SELECT COUNT(t.ID) FROM T_STUDENT t <where> <if test="obj != null"> <if test="obj.id != null"> AND t.ID=#{obj.id} </if> <if test="obj.studentName != null"> AND t.STUDENT_NAME like '%${obj.studentName}%' </if> </if> </where> </select> <!-- 信息分页 --> <select id="page" resultType="com.entity.Student" parameterType="com.entity.Flexigrid"> SELECT * FROM (SELECT A.*, rownum r FROM ( SELECT t.id FROM T_STUDENT t <where> <if test="obj != null"> <if test="obj.id != null"> AND t.ID=#{obj.id} </if> <if test="obj.studentName != null"> AND t.STUDENT_NAME like '%${obj.studentName}%' </if> </if> </where> ORDER BY t.STUDENT_NAME <![CDATA[ ) A WHERE rownum <=#{rowEnd} )B WHERE r > #{rowStart} ]]> </select></mapper>
以上就是关于“SSM如何实现分页查询功能”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。