您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        # 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。