您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Java中怎么使用MyBatis和LIMIT实现分页
## 一、分页概述
在Web应用开发中,分页是处理大量数据展示的核心技术。当数据量达到百万级时,一次性查询所有数据会导致:
- 内存溢出风险
- 网络传输压力
- 用户体验下降
MyBatis作为流行的ORM框架,结合数据库的LIMIT关键字可以高效实现分页功能。
## 二、基础LIMIT分页实现
### 2.1 SQL原生语法
MySQL分页语法:
```sql
SELECT * FROM table_name LIMIT offset, page_size
示例查询第2页(每页10条):
SELECT * FROM users LIMIT 10, 10
<!-- UserMapper.xml -->
<select id="selectByPage" resultType="User">
SELECT * FROM users
LIMIT #{offset}, #{pageSize}
</select>
public List<User> getUsersByPage(int pageNum, int pageSize) {
int offset = (pageNum - 1) * pageSize;
Map<String, Object> params = new HashMap<>();
params.put("offset", offset);
params.put("pageSize", pageSize);
return sqlSession.selectList("com.mapper.UserMapper.selectByPage", params);
}
创建PageParam类:
public class PageParam {
private Integer offset;
private Integer pageSize;
// getters/setters
}
Mapper接口:
List<User> selectByPage(PageParam param);
int offset = 0;
int limit = 10;
RowBounds rowBounds = new RowBounds(offset, limit);
List<User> users = sqlSession.selectList("selectAllUsers", null, rowBounds);
注意:这是内存分页,性能较差。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.0</version>
</dependency>
PageHelper.startPage(1, 10); // 第1页,10条数据
List<User> users = userMapper.selectAll();
PageInfo<User> pageInfo = new PageInfo<>(users);
通过实现MyBatis的Interceptor接口:
@Intercepts(@Signature(type= StatementHandler.class,
method="prepare",
args={Connection.class, Integer.class}))
public class PageInterceptor implements Interceptor {
// 实现分页SQL改写逻辑
}
– 优化方案 SELECT * FROM table WHERE id > 1000000 LIMIT 20
3. **只查询必要字段**:避免`SELECT *`
## 六、完整示例代码
### 6.1 Controller层
```java
@GetMapping("/users")
public PageResult<User> getUsers(
@RequestParam(defaultValue="1") Integer page,
@RequestParam(defaultValue="10") Integer size) {
return userService.getUsersByPage(page, size);
}
public PageResult<User> getUsersByPage(int pageNum, int pageSize) {
PageParam param = new PageParam();
param.setOffset((pageNum-1)*pageSize);
param.setPageSize(pageSize);
List<User> data = userMapper.selectByPage(param);
int total = userMapper.selectCount();
return new PageResult<>(data, total, pageNum, pageSize);
}
@Data
public class PageResult<T> {
private List<T> data;
private Integer total;
private Integer pageNum;
private Integer pageSize;
// 计算总页数
public Integer getTotalPages() {
return (int) Math.ceil((double)total/pageSize);
}
}
LIMIT offset,size
即可实现通过合理使用MyBatis分页技术,可以显著提升系统性能和用户体验。 “`
注:实际使用时可根据需要调整代码示例和详细说明,本文约1050字,完整覆盖了基础实现到高级优化的全流程。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。