springBoot+mybatis的CRUD:分页查询
1、添加pom依赖
老规矩,maven官网搜索: PageHelper Spring Boot Starter
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
2、配置文件编写
新增如下内容
pagehelper:
reasonable: true #配置分页参数合理化功能,默认是false。 #启用合理化时,如果pageNum<1会查询第一页,如果pageNum>总页数会查询最后一页;
#禁用合理化时,如果pageNum<1或pageNum>总页数会返回空数据
helperDialect: mysql #配置使用哪种数据库语言,不配置的话pageHelper也会自动检测
params: count=countSql #为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值;
#可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,
#默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。
supportMethodsArguments: true #支持通过Mapper接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,
#自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
#如果原来的mapper.xml中的SQL已经带了limit,这里就要是false了
3、入参类
比如我们的参数就只有两个
package com.newcrud.outInParam;
import lombok.Data;
@Data
public class PageRequest {
/**
* 当前页码
* **/
private int pageNum;
/**
* 每页数量
* **/
private int pageSize;
}
4、出参类
我们返回信息的格式
package com.newcrud.outInParam;
import lombok.Data;
import java.util.List;
@Data
public class PageResult {
/**
* 当前页码
*/
private int pageNum;
/**
* 每页数量
*/
private int pageSize;
/**
* 记录总数
*/
private long totalSize;
/**
* 页码总数
*/
private int totalPage;
/**
* 数据模型
*/
private List<?> content;
}
5、PageUtils分页查询工具类
其实吧,pagehelper已经帮我们写好了工具类了,我们只是来再封装一层,只拿我们需要的信息放到我们自己的工具类里就可以,这个类的作用就是获取第4小节的出参类
新建utils文件夹
package com.newcrud.utils;
import com.newcrud.outInParam.PageRequest;
import com.newcrud.outInParam.PageResult;
import com.github.pagehelper.PageInfo;
public class PageUtils {
public static PageResult getPageResult(PageRequest pageRequest, PageInfo<?> pageInfo){
PageResult pageResult=new PageResult();
pageResult.setPageNum(pageInfo.getPageNum());
pageResult.setPageSize(pageInfo.getPageSize());
pageResult.setTotalPage(pageInfo.getPages());
pageResult.setTotalSize(pageInfo.getTotal());
pageResult.setContent(pageInfo.getList());
return pageResult;
}
}
6、mapper层新增获取所有用户数据
package com.newcrud.mapper;
import com.newcrud.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 这里有两种方法,一种是像我们一样使用@Mapper,一种是在CrudApplication上面新增了@MapperScan备注。直接扫描了整个包
* https://www.cnblogs.com/JackpotHan/p/10286496.html
* 不过不知道为啥,不加上这个好像是不行,没办法auto,稍微有那么点尴尬
* **/
@Mapper
public interface UserMapper {
List<User> getUsers();
//新增getUsersPage,获取所有用户信息
List<User> getUsersPage();
User getUserById(Integer id);
boolean insertUser(User user);
boolean deleteUserById(Integer id);
boolean updateUser(User user);
User getUSerJmeter(Integer id,String username);
User getUserByUserName(String username);
Integer getUSerIdByUserName(String username);
}
7、mapper.xml新增查询所有用户语句
<!--分页查询-->
<select id="getUsersPage" resultType="User" resultMap="user">
select * from m_user
</select>
8、service接口层
package com.newcrud.service;
import com.newcrud.entity.User;
import com.newcrud.outInParam.PageRequest;
import com.newcrud.outInParam.PageResult;
import java.util.List;
public interface UserService {
User getUserById(Integer id);
List<User> getAllUser();
boolean insertUser(User user);
boolean deleteUserById(Integer id);
// 新增分页查询service接口层
PageResult getAllUserPage(PageRequest pageRequest);
boolean updateUser(User user);
User getJmeterUser(Integer id,String username);
User getUserByUserName(String username);
Integer getUserIdByUserName(String username);
}
9、service实现类层
package com.newcrud.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.newcrud.entity.User;
import com.newcrud.mapper.UserMapper;
import com.newcrud.outInParam.PageRequest;
import com.newcrud.outInParam.PageResult;
import com.newcrud.service.UserService;
import com.newcrud.utils.PageUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserById(Integer id) {
return userMapper.getUserById(id);
}
@Override
public List<User> getAllUser() {
return userMapper.getUsers();
}
//新增1:controller入参的时候会传入PageRequest,通过PageRequest的方法获取页面的,当前页码和每一页的数据条数
public PageInfo<User> getPageInfo(PageRequest pageRequest){
int pageNum = pageRequest.getPageNum();
int pageSize = pageRequest.getPageSize();
PageHelper.startPage(pageNum,pageSize);
//通过mapper层,获取所有的用户信息
List<User> userMenus=userMapper.getUsersPage();
//将用户信息放到PageInfo中返回出去
return new PageInfo<User>(userMenus);
}
@Override
//新增2:实现接口层的方法
public PageResult getAllUserPage(PageRequest pageRequest){
return PageUtils.getPageResult(pageRequest,getPageInfo(pageRequest));
}
@Override
public Integer getUserIdByUserName(String username) {
return userMapper.getUSerIdByUserName(username);
}
@Override
public boolean insertUser(User user) {
return userMapper.insertUser(user);
}
@Override
public boolean deleteUserById(Integer id) {
return userMapper.deleteUserById(id);
}
@Override
public boolean updateUser(User user) {
return userMapper.updateUser(user);
}
@Override
public User getJmeterUser(Integer id,String username){
return userMapper.getUSerJmeter(id,username);
}
@Override
public User getUserByUserName(String username){
return userMapper.getUserByUserName(username);
}
}
10、controller层
package com.newcrud.controller;
import com.newcrud.entity.User;
import com.newcrud.outInParam.PageRequest;
import com.newcrud.outInParam.RequestParamOne;
import com.newcrud.outInParam.Result;
import com.newcrud.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/crud")
@CrossOrigin
public class UserController {
@Autowired
private UserServiceImpl userService;
@GetMapping("/user/{id}")
public Result geyUserById(@PathVariable("id") Integer id){
return Result.succ(userService.getUserById(id));
}
@RequestMapping(value = "userone",method = RequestMethod.POST)
public User getUserByIdPost(@RequestBody RequestParamOne requestParamOne){
return userService.getUserById(requestParamOne.getId());
}
@RequestMapping(value = "/username",method = RequestMethod.POST)
public User getUserByUserName(@RequestParam(value = "username") String username){
return userService.getUserByUserName(username);
}
@RequestMapping(value = "/users",method = RequestMethod.POST)
public Result getUser(){
// return userService.getAllUser();
return Result.succ(userService.getAllUser());
}
//新增controler层方法,只需要传入PageRequest的类型对象就行
@RequestMapping(value = "/page",method = RequestMethod.POST)
public Object findPage(@RequestBody PageRequest pageRequest){
return userService.getAllUserPage(pageRequest);
}
}