赞
踩
互联网应用中,分页可谓无处不在,在每个需要展示数据的地方,都能找到分页的影子。在日常开发中,为了追求效率,通常使用数据库的物理分页。这时,对于一个业务逻辑SQL,大多数情况需要输出两段SQL来达到分页效果:count查询总数和limit分页,这无疑增加了大量的工作量。对于这种大量的、相似的、非业务逻辑的代码,抽象出公共插件是势在必行的。
Mybatis给开发者提供了一个拦截器接口,只要实现了该接口,就可以在Mybatis执行SQL前,作一些自定义的操作。分页插件就是在此基础上开发出来的,对于一个需要分页的SQL,插件会拦截并生成两段SQL。举一个简单的例子:
原SQL:
select * from table where a = '1'
拦截后的查询总数SQL:
select count(*) from table where a = '1'
拦截后的分页SQL:
select * from table where a = '1' limit 5,10
这样我们只需要根据业务逻辑开发原SQL,不需关心分页语法对原SQL的影响,拦截器已经为我们处理好了。
添加mybatis、pagehelper、mysql和web依赖。
<properties> <java.version>1.8</java.version> <mybatis.version>2.1.0</mybatis.version> <mybatis.pagehelper.version>1.2.5</mybatis.pagehelper.version> </properties> <dependencies> <!--web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> </dependency> <!-- pagehelper --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${mybatis.pagehelper.version}</version> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
配置数据库信息和分页参数。
spring: datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: 123456 url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT pagehelper: #配置数据库类型 helperDialect: mysql #3.3.0版本可用 - 分页参数合理化,默认false禁用 #启用合理化时,如果pageNum<1 会查询第一页,如果pageNum>pages会查询最后一页 #禁用合理化时,如果pageNum<1 或pageNum>pages会返回空数据 reasonable: true #是否支持接口参数来传递分页参数,默认false supportMethodsArguments: true #3.5.0版本可用 - 为了支持startPage(Object params)方法 #增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 #可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 params: count=countSql
@Alias("user") public class User { private Long id; private String name; private Integer age; private String email; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
使用注解方式。
@Mapper
public interface UserMapper {
@Select("select * from user")
Page<User> getUserList();
}
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
// http://localhost:8080/getUserList?pageNum=1&pageSize=2
@RequestMapping("getUserList")
public Page<User> getUserList(Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
Page<User> userList = userMapper.getUserList();
return userList;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。