欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot整合通用Mapper和PageHelper,使用PageHelper.startPage()失效的问题

程序员文章站 2022-06-23 10:45:30
使用SpringBoot创建工程,在配置好通用Mapper和PageHelper后,发现使用PageHelper.startPage()后,查询结果一直是表中的所有数据,PageHelper.startPage()失效。SpringBoot项目中必须使用该包pagehelper-spring-boot-starterpom.xml tk.mybatis...

使用SpringBoot创建工程,在配置好通用Mapper和PageHelper后,发现使用PageHelper.startPage()后,查询结果一直是表中的所有数据,PageHelper.startPage()失效。

SpringBoot项目中必须使用该包pagehelper-spring-boot-starter

pom.xml

<!-- 通用mapper -->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.0.2</version>
</dependency>
<!-- PageHelper分页插件 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

在配置dialect: mysql,一直报错。通过网上资料发现使用全类名可以解决该问题。但是在使用PageHelper.startPage()方法时,分页并不会生效。

application.yml中配置通用mapper和PageHelper

#通用mapper配置
mapper:
  identity: MYSQL

#PageHelper插件配置 该配置对PageHelper不起作用。使用config包中的PageHelperConfig方式可以起作用。
pagehelper:
  #原来的配置 dialect: mysql              
  #解决途径:通过debug源码,发现配置文件读取到的是“mysql”,而源码中需要的是一个类的全类名来反射,所以推断这个属性值不是mysql,而是一个全类名。
  dialect: com.github.pagehelper.dialect.helper.MySqlDialect
  reasonable: true
  support-methods-arguments: true
  params: count=countSql

查询资料发现也有使用以下配置PageHelper的,使用此配置即可正确的处理分页。原因未知,依然是满脸疑惑,但是功夫不负有心人还是将问题解决了。有知道的博友可以留言哦,谢谢。如果要配置该文件,需要将application.yml的PageHelper插件配置删除掉,否则PageHelper.startPage()仍然会失效,将会查询出所有数据。

import com.github.pagehelper.PageHelper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

@Configuration
public class PageHelperConfig {

    @Bean
    public PageHelper pageHelper(){
        PageHelper pageHelper=new PageHelper();
        Properties properties=new Properties();
        //把这个设置为true,会带RowBounds第一个参数offset当成PageNum使用
        properties.setProperty("offsetAsPageNum","true");
        //设置为true时,使用RowBounds分页会进行count查询
        properties.setProperty("rowBoundsWithCount","true");
        properties.setProperty("reasonable","true");
        pageHelper.setProperties(properties);
        return pageHelper;
    }
}

以下是项目中主要代码。

User实体类

@Repository
@Table(name = "user")
//mybatis通用接口mapper依赖JPA实体类采用JPA,配置表名
public class User implements Serializable {

    //配置主键
    @Id
    private String username;
    private String password;
	
	//省略getter和setter方法

Maper层:

UserMaper

import com.zueb.domain.User;
import tk.mybatis.mapper.common.BaseMapper;
import tk.mybatis.spring.annotation.MapperScan;

@MapperScan("com.example.mapper")
public interface UserMapper extends BaseMapper<User> {
}

业务层:

IUserService

/**
 * 处理用户逻辑的业务层接口
 */
public interface IUserService {

    /**
     * 获取用户列表
     * @return List<User>
     */
    PageInfo<User> findAll(int pageNum, int pageSize);
}

UserServiceImpl

@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public PageInfo<User> findAll(int pageNum, int pageSize) {
        //参数pageNum是页码 参数pageSize 代表每页显示条数
        PageHelper.startPage(pageNum,pageSize);

        //调用userMapper获取所有用户
        List<User> users = userMapper.selectAll();

        PageInfo<User> pageInfo = new PageInfo<>(users);
        return pageInfo;
    }
}

控制层:

UserController

@RestController
@RequestMapping("/users")
public class UserController extends BaseController{

    @Autowired
    private IUserService userService;

    /**
     * 处理获取用户列表请求
     * @return JsonResult对象 返回为json数据
     */
    @RequestMapping("/userList")
    public JsonResult<List<User>> logout(HttpSession session) {
        PageInfo<User> pageInfo = userService.findAll(1,5);
        List<User> data = pageInfo.getList();
        return new JsonResult<>(OK,data);
    }
}

本文地址:https://blog.csdn.net/Puppet___/article/details/112852073