`
liutingfeng2010
  • 浏览: 7606 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

当离线查询中in(not in)里的个数超过1000时

 
阅读更多
public class DBUtils {
	/**
	 * * 当离线查询中in(not in)里的个数超过1000时 ,拆分成几个不同的in分句中 *
	 * 
	 * create by liutingfeng * * @param list * 满足条件的集合 * @param detachedCriteria
	 * * DetachedCriteria对象 * @param inOrNot * in 或者 not * @param field * 字段名称 * @param
	 * manageSizeEachOnce * 拆分每个in中放多少个,不填写默认是1000个 * @return DetachedCriteria *
	 * 
	 * example: *
	 * 
	 * final DetachedCriteria criteria = *
	 * DetachedCriteria.forClass(Product.class); *
	 * 
	 * final List scopeProductClasses = * this.productClassDao
	 * .findSubClassesByMultiIds("1,2"); *
	 * 
	 * DbHelper.splitSourceInDc(scopeProductClasses, criteria, "in", *
	 * "class5");
	 */
	@SuppressWarnings("unchecked")
	public static DetachedCriteria splitSourceInDc(List list, DetachedCriteria detachedCriteria, String inOrNot,
			String field, Integer... manageSizeEachOnce) {
		Integer size = 1000;
		// 如果指定了每次处理的数量,没有写默认为1000
		if (ObjectHelper.isNotEmpty(manageSizeEachOnce) && ObjectHelper.isNotEmpty(manageSizeEachOnce[0])) {
			size = manageSizeEachOnce[0];
		}
		if (ObjectHelper.isNotEmpty(list) && list.size() > 0) {
			Junction junction = null;
			if (("in").equals(inOrNot)) {
				junction = Restrictions.disjunction();
			} else if ("not".equals(inOrNot)) {
				junction = Restrictions.conjunction();
			}
			// 总共分成totalPage数个in (not in)语句
			int totalPage = list.size() / size + (list.size() % size > 0 ? 1 : 0);
			for (int i = 0; i < totalPage; i++) {
				// 起始list的记录
				int startIndexOfList = i * size; // 结束list的记录
				int endIndexOfList = (i + 1) * size > list.size() ? list.size() : (i + 1) * size;
				List sublist = list.subList(startIndexOfList, endIndexOfList);
				junction.add(Restrictions.in(field, sublist));
			}
			detachedCriteria.add(junction);
		}
		return detachedCriteria;
	}
}
分享到:
评论

相关推荐

    《线性代数》离线作业doc-厦门大学网络教育2013-2014学年.pdf

    当系数矩阵的秩小于未知数的个数时,方程组可能有无穷多解;当增广矩阵的秩小于系数矩阵的秩时,方程组无解。 8. **二次型的正交变换**:二次型f可以通过正交变换U将矩阵化为对角形,即UYX的二次型为标准形。题目中...

    1102 与指定数字相同的数的个数.cpp

    1102:与指定数字相同的数的个数 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 33228 通过数: 21033 【题目描述】 输出一个整数序列中与指定数字相同的数的个数。 【输入】 输入包含三行: 第一行为N,表示整数...

    汇编程序 记录某个字存储单元数据中1的个数

    可以使用`LOOP`指令,配合一个计数寄存器,每次循环前减1,当计数寄存器为0时,循环结束。在每次迭代中,都要对位掩码左移一位,以便检查下一位。 5. **结束**:循环结束后,计数寄存器的值就是数据中1的个数。可以...

    1068:与指定数字相同的数的个数.cpp

    1068:与指定数字相同的数的个数 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 28644 通过数: 20305 【题目描述】 输出一个整数序列中与指定数字相同的数的个数。输入包含2行:第1行为N和m,表示整数序列的长度(N...

    实现求一个数字里面的0的个数

    这里我们关注的是如何“实现求一个数字里面的0的个数”。这个任务可以通过多种编程语言和方法来解决,下面我们将详细讨论两种常见的实现方式。 **方法一:遍历法** 这种方法是最直观的,通过遍历数字的每一位,...

    C++计算一个数字的二进制中0或1的个数原理及代码

    ### C++ 计算一个数字的二进制中0或1的个数原理及代码解析 在计算机科学中,二进制表示法是基础之一,它不仅被用于数据存储,还在算法设计、加密技术以及系统优化等多个方面发挥着重要作用。本篇文章将详细探讨如何...

    求二进制数中1的个数.pdf

    ### 求二进制数中1的个数 #### 背景介绍 在计算机科学领域,理解和操作二进制数是非常基础且重要的技能之一。对于一个字节(8位)的变量,求其二进制表示中“1”的个数是一个常见的问题。这一问题不仅出现在计算机...

    java查询文件的个数

    java查询文件的个数

    统计字符串中元音字母的个数

    此代码就是统计字符串中元音字母的个数而已

    经典面试题(1):统计整数中1的个数

    本题“经典面试题(1):统计整数中1的个数”是一个典型的例子,其核心是计算一个无符号32位整数在二进制表示下含有多少个1。这个问题在计算机科学中被称为“位操作”或“计数比特”的问题,涉及到位运算、循环以及...

    快速搜索位图索引中1的个数.rar

    这个“快速搜索位图索引中1的个数”主题主要聚焦于如何高效地统计位图中代表“1”的位的数量。位图索引利用二进制位来表示数据,每个位对应一个特定的值或对象,0表示不存在,1表示存在。由于位操作的高效性,这种...

    统计一个字符串中某个字符的个数

    在编程领域,统计一个字符串中特定字符的个数是一项基础任务,它涉及到字符串处理和循环控制等基础知识。在这个场景中,我们使用汇编语言来实现这个功能。汇编语言是一种低级编程语言,它直接对应于机器指令,具有...

    C语言程序设计-求一批数中小于平均值的数的个数;.c

    C语言程序设计-求一批数中小于平均值的数的个数;.c

    判断2个字符串中相同的个数

    判断2个字符串中相同的个数,如果超过4个相同就输出1,否则输出0

    Delphi获取文字中英文字母的个数..rar

    在本案例中,我们关注的是获取一个字符串中英文字母(包括大写和小写字母)的个数。以下是对这个任务的详细阐述: 1. **字符串基本操作**:在Delphi中,字符串通常表示为`string`类型,它是一个Unicode字符串,可以...

    计算机原理求正数,负数,零的个数

    计算机原理中,求正数、负数、零的个数是汇编语言程序设计的基本问题。通过编程实践,熟悉汇编语言分支与循环结构的程序设计方法,并了解汇编程序设计的基本技术与基本方法。 本实验的目的是通过编程实践,统计DA_...

    sql高级查询50题.docx

    该查询使用了 NOT IN 操作符和子查询,子查询用于统计每个学生的课程信息。 知识点: * NOT IN 操作符 * 子查询 查询学过“001”并且也学过编号“002”课程的同学的学号 该查询使用了子查询和 AND 操作符,子...

    编程统计数据区中正数、零和负数的个数

    - 结束条件:当不满足继续循环的条件时退出循环。 3. **循环程序的设计、调试方法**: - 设计阶段:明确循环的目的、循环次数以及循环体内要执行的操作。 - 调试阶段:通过打印中间结果、使用断点等方式验证循环...

    (C语言)输入n,统计0~n中1的个数。

    输入数字n,统计0~n中1的个数,如12,1,10,11,12带1的个数5个。(假定输入的数0~999)(数组法)

Global site tag (gtag.js) - Google Analytics