分页查询
解决数据量庞大的情况下,一次查询过多数据。
一页一页的查询数据,每页查询少量数据即可。
示例 : 每页显示2条数据,共7条数据
总页数=总条数/每页大小+1
6/2 = 3
7/2 = 3+1
mybatis插件帮助我们进行分页
我们只需要告诉他当前查询第几页,每页显示多少条数据即可。
此插件会自动进行计算,把limit , 动态添加到sql语句中,
还可以帮助我们自动查询用户总数
-- 每页大小 已知条件 可以从前端传递给后端
-- 当前页码 已知条件 可以从前端传递给后端 (当前页码-1)*页数大小
-- 总条数 已知条件 可以通过查询得到
-- 总页数
SELECT * FROM USER WHERE TYPE = 1 LIMIT 0,2 -- 1 limit 开始查询的位置,每页显示的大小
SELECT * FROM USER WHERE TYPE = 1 LIMIT 2,2 -- 2
SELECT * FROM USER WHERE TYPE = 1 LIMIT 4,2 -- 3
SELECT * FROM USER WHERE TYPE = 1 LIMIT 6,2 -- 4
-- 查询总条数
SELECT COUNT(*)FROM USER WHERE TYPE = 1
前端:
向后端请求 pageNum:当前页 pageSize:每页的大小(条数)
后端:
导入mybatis插件 分页jar包: pom.xml
<!-- pagehelper依赖 分页jar包 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
UserController:
接收请求 pageNum 、 pageSize
@GetMapping(value = "/list")
public CommonResult list(Integer pageNum,Integer pageSize){
try {
PageInfo<User> pageInfo = userService.list(pageNum,pageSize);
return new CommonResult("",200,pageInfo.getList(),pageInfo.getTotal());
}catch (Exception e){
e.printStackTrace();
return new CommonResult("查询失败",500,null);
}
}
UserService:
public PageInfo<User> list(int pageNum, int pageSize){
// pageNum当前页面 pageSize每页大小
PageHelper.startPage(pageNum, pageSize);
List<User> list = userDao.list();//会动态向sql添加limit,并且额外会发出一条sql,查询总条数
PageInfo<User> pageInfo = new PageInfo<>(list);//查询的数据,总条数封装在PageInfo里面
return pageInfo;
}
UserDao:
List<User> list();
UserMapper:
分页操作需要嵌套查询。
<resultMap id="userMap" type="User">
<id column="id" property="id"></id>
<result column="account" property="account"></result>
<result column="gender" property="gender"></result>
<result column="phone" property="phone"></result>
<!--查询用户关联的部门-->
<association property="dept" column="deptid" select="finddepts"></association>
<!--查询用户分配的角色 cloumn="id" 为用户的id-->
<collection property="roles" javaType="list" ofType="Role" column="id" select="findRole"></collection>
</resultMap>
<select id="list" resultMap="userMap">
SELECT id,account,gender,phone,deptid FROM USER WHERE TYPE=1
</select>
<select id="finddepts" parameterType="int" resultType="Dept">
SELECT name FROM dept WHERE id=#{id}
</select>
<select id="findRole" parameterType="int" resultType="Role">
SELECT r.name FROM user_role ur LEFT JOIN ROLE r ON ur.roleid = r.id WHERE ur.userid = #{id}
</select>
数据库用户信息:
前端分页显示: