几种分页总结

 

 

--ID连续
select * from CardInfo where ID>=10 and ID<=20 

 

--查询11-20条数据 查出来结果是12-21
--ID不连续

 

--外层查询没有对表A查询,效率大有提高
select top 10 * from (select top 20 * from CardInfo order by ID)a
order by ID  desc

 

--两次对表A查询效率较低
select top 10 * from CardInfo where ID not in (select  top 10 ID  from CardInfo)

 

--ROW_NUMBER()函数效率更高,sqlserver2005以及以上版本中才可以使用
select * from (select *,row_number() over (order by id) as a from CardInfo) as temp
where a between 11 and 20

### MyBatis 分页实现的方式 MyBatis 是一种流行的持久层框架,支持多种分页实现方式。以下是几种常见的分页方法及其特点: #### 1. **基于 `RowBounds` 的分页** 使用 `RowBounds` 对象可以在执行查询时指定偏移量和返回记录数。这种方式适用于简单的分页需求,但在大数据场景下性能较差,因为底层会加载所有数据后再截取所需部分[^3]。 ```java // 创建 RowBounds 实例 RowBounds rowBounds = new RowBounds(offset, limit); // 执行带分页参数的查询 List<User> users = sqlSession.selectList("selectUsers", null, rowBounds); ``` #### 2. **基于 SQL 参数的分页** 这种方式通过在 SQL 查询中手动添加分页条件来完成分页操作。例如,在 MySQL 数据库中可以通过 `LIMIT` 子句实现分页[^1]。 ```sql SELECT * FROM user LIMIT #{offset}, #{limit}; ``` 此方法的优点是可以充分利用数据库自身的优化能力,缺点是需要针对不同数据库编写不同的分页语法。 #### 3. **基于插件的分页** MyBatis 提供了一些第三方插件用于简化分页开发工作,其中最常用的插件之一是 PageHelper。它允许开发者仅需少量配置即可轻松实现分页功能[^2]。 ##### 配置 PageHelper 插件 在 Maven 项目中引入依赖项: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.0</version> </dependency> ``` 使用示例: ```java // 设置分页参数 PageHelper.startPage(pageNum, pageSize); // 执行查询 List<User> userList = userMapper.selectAll(); // 获取分页信息 PageInfo<User> pageInfo = new PageInfo<>(userList); ``` #### 4. **基于封装代码的分页** 如果不想依赖外部插件,也可以通过自定义工具类或拦截器的方式来实现分页逻辑。这种方法灵活性较高,适合有特殊需求的应用场景[^4]。 以下是一个简单的封装例子: ```java public class Pagination { private int offset; private int limit; public String getLimitSql(String sql) { StringBuilder sb = new StringBuilder(sql); sb.append(" LIMIT ").append(this.offset).append(", ").append(this.limit); return sb.toString(); } } ``` 调用时只需传入原始 SQL 和分页参数即可生成带有分页条件的新 SQL。 --- ### 总结 以上四种方式各有优劣,具体选择取决于实际业务需求和技术栈环境。对于小型应用来说,可以直接采用基于 SQL 参数的方法;而对于大型系统,则建议优先考虑插件方案以提升开发效率并降低维护成本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值