批量保存或者查詢數據庫

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);
        }
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章