详述 DB2 分页查询及 Java 实现的示例
程序员文章站
2024-02-27 23:26:09
博主说:有时候,我们需要对数据库中现有的数据进行大量处理操作(例如表中的某个字段需要全部更新等),如果直接使用select * from tablename很容易出现问题,...
博主说:有时候,我们需要对数据库中现有的数据进行大量处理操作(例如表中的某个字段需要全部更新等),如果直接使用select * from tablename很容易出现问题,因此我们可以选择分页查询,批量处理数据。
db2
- startnum:起始数
- endnum:结尾数
sql 语句
select * from ( select b.*, rownumber() over() as tn from ( select * from 表名 ) as b ) as a where a.tn between startnum and endnum;
如上所示,此即为 db2 的分页查询语句。
mapper
<?xml version="1.0" encoding="utf-8" ?> <!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.hit.store.dao.storeentitydao" > <resultmap id="baseresultmap" type="storeentity" > <id column="id" property="id" jdbctype="bigint" /> <result column="create_time" property="createtime" jdbctype="timestamp" /> <result column="owner" property="owner" jdbctype="varchar" /> <result column="description" property="description" jdbctype="varchar" /> </resultmap> <select id="query4encrypt" parametertype="map" resultmap="baseresultmap"> <!--- 在映射文件中 sql 语句末尾不应该加分号,防止解析错误 ---> select * from ( select b.*, rownumber() over() as tn from ( select * from tbl_store ) as b ) as a where a.tn between #{startnum} and #{endnum} </select> </mapper>
java
/** * dao 层代码 */ @repository("storeentitydao") public interface storeentitydao { list<storeentity> query4encrypt(map<string, object> parammap); } /** * service 层接口代码 */ public interface storeentityservice { public void query4encrypt(); } /** * service 层实现代码 */ @service("storeentityservice") public interface storeentityserviceimpl implements storeentityservice { @override public void query4encrypt() { boolean flag = true; long startnum = 0l; long endnum = 0l; map<string, object> parammap = new hashmap<string, object>(); while (flag) { endnum = startnum + 100; parammap.put("startnum", startnum); parammap.put("endnum", endnum); list<storeentity> storeentitylist = storeentitydao.query4encrypt(parammap); if (storeentitylist != null && storeentitylist.size() > 0) { // 遍历加密数据 for (storeentity storeentity : storeentitylist) { // 加密及持久化处理 } } if (storeentitylist != null && storeentitylist.size() >= 100) { startnum = endnum++; } else { flag = false; } } } }
至此,我们模拟了数据库映射 mapper.xml 文件、dao 层和 service 层,并在 mapper.xml 中书写了分页查询 sql 语句。特别地,在 service 的实现层中,我们实现了具体的分页查询操作,并在其中批量处理数据。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。