springBoot+mybatis的CRUD:分页查询

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);
    }

}

11、测试

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值