当前位置: 移动技术网 > IT编程>开发语言>Java > 详述 DB2 分页查询及 Java 实现的示例

详述 DB2 分页查询及 Java 实现的示例

2019年07月19日  | 移动技术网IT编程  | 我要评论

博主说:有时候,我们需要对数据库中现有的数据进行大量处理操作(例如表中的某个字段需要全部更新等),如果直接使用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 的实现层中,我们实现了具体的分页查询操作,并在其中批量处理数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网