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

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

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

pom.xml


<dependency>
    <groupId>tk.mybatisgroupId>
    <artifactId>mapper-spring-boot-starterartifactId>
    <version>2.0.2version>
dependency>

<dependency>
    <groupId>com.github.pagehelpergroupId>
    <artifactId>pagehelper-spring-boot-starterartifactId>
    <version>1.3.0version>
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
     */
    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);
    }
}

你可能感兴趣的:(笔记,spring,boot,mybatis,java)