使用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方法
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);
}
}