package com.liu.test;
import java.util.ArrayList;
import java.util.List;
/**
* -
* copyright (c) 2018, 劉 斌 All rights reserved
* 文件名稱:SortTest.java
* 摘要:批量插入數據
* 作 者:liu bin
* 創建時間:2018 年 09 月 14 日
*
*/
public class BatchInsertList {
public static void main(String[] args) {
BatchInsertList batchInsertList = new BatchInsertList();
batchInsertList.insertUser();
}
public void insertUser() {
List<User> userList = new ArrayList<User>();
userList.add(new User("A", 24));
userList.add(new User("B", 23));
userList.add(new User("C", 22));
userList.add(new User("D", 21));
userList.add(new User("E", 20));
userList.add(new User("F", 19));
userList.add(new User("G", 18));
userList.add(new User("H", 17));
userList.add(new User("I", 16));
userList.add(new User("J", 15));
userList.add(new User("K", 14));
userList.add(new User("L", 13));
userList.add(new User("M", 12));
userList.add(new User("N", 11));
int i = 0;
int count = 0;
int listSize = userList.size();
int batchNum=4;
while (listSize > batchNum) {
count++;
System.out.println("【第" + count + "批次插入User表】,【插入的List條數=[" + userList.subList(i, i + batchNum).size()
+ "]】,【取的是useList中第(" + (i+1) + "到第" + (i + batchNum) + ")條數據】,【第" + (i + batchNum) + "條數據的User信息爲=》"
+ userList.get(i + batchNum-1).toString()+"】");
for (int j = 0; j < userList.subList(i, i + batchNum).size(); j++) {
System.out.println(userList.subList(i, i + batchNum).get(j).toString());
}
i = i + batchNum;
listSize = listSize - batchNum;
}
if (listSize > 0) {
count++;
System.out.println("=============================================================");
System.out.println("listSize=[" + listSize + "],i=[" + i + "]");
System.out.println("【第" + count + "批次插入User表】,【插入的List條數=[" + userList.subList(i, (i + listSize)).size()+"]】,【取的是useList中第(" + (i+1) + "到第" + (i + listSize) + ")條數據】,【第" + (i + listSize) + "條數據的User信息爲=》"
+ userList.get(i + listSize-1).toString()+"】");
for (int j = 0; j < userList.subList(i, i + listSize).size(); j++) {
System.out.println(userList.subList(i, (i + listSize)).get(j).toString());
}
}
}
class User {
private String userName;
private int userAge;
public User(String userName, int userAge) {
super();
this.userName = userName;
this.userAge = userAge;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
@Override
public String toString() {
return "User [userName=" + userName + ", userAge=" + userAge + "]";
}
}
}
控制檯輸出結果
【第1批次插入User表】,【插入的List條數=[4]】,【取的是useList中第(1到第4)條數據】,【第4條數據的User信息爲=》User [userName=D, userAge=21]】
User [userName=A, userAge=24]
User [userName=B, userAge=23]
User [userName=C, userAge=22]
User [userName=D, userAge=21]
【第2批次插入User表】,【插入的List條數=[4]】,【取的是useList中第(5到第8)條數據】,【第8條數據的User信息爲=》User [userName=H, userAge=17]】
User [userName=E, userAge=20]
User [userName=F, userAge=19]
User [userName=G, userAge=18]
User [userName=H, userAge=17]
【第3批次插入User表】,【插入的List條數=[4]】,【取的是useList中第(9到第12)條數據】,【第12條數據的User信息爲=》User [userName=L, userAge=13]】
User [userName=I, userAge=16]
User [userName=J, userAge=15]
User [userName=K, userAge=14]
User [userName=L, userAge=13]
=============================================================
listSize=[2],i=[12]
【第4批次插入User表】,【插入的List條數=[2]】,【取的是useList中第(13到第14)條數據】,【第14條數據的User信息爲=》User [userName=N, userAge=11]】
User [userName=M, userAge=12]
User [userName=N, userAge=11]
================================================================================
此外,我們還可以採用下面的方式來進行批量的查詢或者刪除
1、首先pom.xml文件中引用如下依賴
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency>
2、示例代碼如下
package com.*.pgas.rsf.business;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPipeline;
import com.google.common.collect.Lists;
import com.*.framework.sedis.ShardedJedisAction;
import com.*.pgas.admin.common.ShardedRedisService;
import com.*.pgas.admin.constant.RedisConstants;
import com.*.pgas.admin.dto.IndActScheduleDto;
import com.*.pgas.admin.service.IndependentInvestmentService;
import com.*.pgas.admin.service.TestService;
/**
* 〈一句話功能簡述〉<br>
* 〈功能詳細描述〉
*
* @author 劉 斌
* @date 2019/7/16
* @see [相關類/方法](可選)
* @since [產品/模塊版本] (可選)
*/
@Service
public class TestBusiness {
private static final Logger LOGGER = LoggerFactory.getLogger(TestBusiness.class);
@Autowired
private TestService testService;
@Autowired
private ShardedRedisService shardedRedisService;
@Autowired
private IndependentInvestmentService indService;
private static final int BATCH_SIZE = 50;
/**
* 功能描述: <br>
* 清理活動類型爲營銷玩法的已發佈獨立招商活動對應的排期表數據
*
* @author 劉 斌
* @see [相關類/方法](可選)
* @since [產品/模塊版本](可選)
*/
public String cleanScheduleOnSpecialAndcInd() {
List<String> actList = new ArrayList<String>();
List<String> activityAdminEntityNew = testService.getActivityOnSpecialAndcInd(false);
List<String> activityAdminEntityOld = testService.getActivityOnSpecialAndcInd(true);
actList.addAll(activityAdminEntityNew);
actList.addAll(activityAdminEntityOld);
List<List<String>> actLists = Lists.partition(actList, BATCH_SIZE);
for (List<String> activityList : actLists) {
delScheduleOnSpecial(testService.getActScheduleByActIds(activityList));
}
return "成功清理,總條數=【" + actList.size() + "】";
}
/**
*
* 功能描述: <br>
* 根據活動ids刪除活動排期表中的數據
*
* @author 劉 斌
* @see [相關類/方法](可選)
* @since [產品/模塊版本](可選)
* @param indActScheduleDtoList 活動排期列表
*/
private void delScheduleOnSpecial(final List<IndActScheduleDto> indActScheduleDtoList) {
try {
// 1、循環列表,清除對應redis
shardedRedisService.getShardedJedisClient().execute(new ShardedJedisAction<Void>() {
@Override
public Void doAction(ShardedJedis shardedJedis) {
ShardedJedisPipeline pipeline = shardedJedis.pipelined();
List<String> actIds = new ArrayList<String>();
for (IndActScheduleDto scheduleEntity : indActScheduleDtoList) {
String key = shardedRedisService.key(RedisConstants.PGS_IND_ACT_SCHEDULE,
scheduleEntity.getVendorCode(), scheduleEntity.getItemCode());
// 2、根據score清除key下的數據
Long sort = scheduleEntity.getSort();
pipeline.zremrangeByScore(key, (double) sort, (double) sort);
// 3.添加需刪除的actId
actIds.add(scheduleEntity.getActId());
}
pipeline.sync();
// 4、從db中進行刪除
indService.removeIndActivityScheduleByActIds(actIds);
LOGGER.info("delScheduleOnSpecial success , actIds={}", actIds.toString());
return null;
}
});
} catch (Exception e) {
LOGGER.error("delScheduleOnSpecial execute fail,", e);
}
}
}