詳しくはDB 2ページで調べて、Javaで実現します。
6868 ワード
ブロガーは、データベースにある既存のデータを大量に処理する必要がある場合(例えば、テーブルの中のあるフィールドは全部更新する必要があるなど)、直接
DB 2 startNum:開始数 endNum:末尾数SQL文
Mapper
select * from tableName
を使うと問題が発生しやすいので、ページ別に照会し、大量にデータを処理することができます。DB 2
SELECT * FROM
(
SELECT B.*, ROWNUMBER() OVER() AS TN FROM
(
SELECT * FROM
) AS B
) AS A
WHERE A.TN BETWEEN startNum AND endNum;
上記のように、DB 2の改ページ照会文です。Mapper
<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">
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 query4encrypt(Map 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 paramMap = new HashMap();
while (flag) {
endNum = startNum + 100;
paramMap.put("startNum", startNum);
paramMap.put("endNum", endNum);
List 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の実現層においては、特定の改ページクエリ動作を実現し、データを一括処理する。