-
-
int
pageSize =
1000
;
-
int
page =
1
;
-
int
offset;
-
int
rowCount;
-
List<GiftCard> list =
null
;
-
List<Integer> userIdList =
new
ArrayList<Integer>();
-
-
if
(giftCardCount >
0
){
-
if
(giftCardCount%pageSize==
0
){
-
page=(
int
) (giftCardCount/pageSize);
-
}
else
{
-
page=(
int
) (giftCardCount/pageSize+
1
);
-
}
-
}
-
-
for
(
int
i =
1
; i < page +
1
; i++) {
-
if
(page ==
1
){
-
offset =
0
;
-
rowCount = (
int
) giftCardCount;
-
list = giftcardDAO.getGiftCardThreeDaysDue(rowCount,offset,currentTime,fourDaysTime);
-
if
(
null
!= list && list.size() >
0
) {
-
for
(GiftCard giftCard : list) {
-
Integer userId = giftCard.getUserId();
-
userIdList.add(userId);
-
}
-
}
-
}
else
{
-
if
(i ==
1
){
-
offset =
0
;
-
}
else
{
-
offset = (i-
1
)*pageSize;
-
}
-
if
(page == i){
-
-
rowCount = (
int
) giftCardCount - (i-
1
) * pageSize;
-
}
else
{
-
-
rowCount = pageSize;
-
}
-
list = giftcardDAO.getGiftCardThreeDaysDue(rowCount,offset,currentTime,fourDaysTime);
-
if
(
null
!= list && list.size() >
0
) {
-
for
(GiftCard giftCard : list) {
-
Integer userId = giftCard.getUserId();
-
userIdList.add(userId);
-
}
-
}
-
}
-
}
上面的代码,是否能进一步优化呢?
如果采用for循环的break跳出会不会逻辑更加简单些?
每一次循环查出1000条,当某一次查出的数据的数量不够1000条时,表示再往下循环已然没有数据,这个时候跳出,循环结束,即将过期卡的信息也被完全查出,相比上面的业务逻辑,简单许多,在生产商可以节省不少时间,修改代码如下:
[java]
view plain
-
-
int
pageSize =
1000
;
-
int
offset;
-
List<GiftCard> list =
null
;
-
List<Integer> userIdList =
new
ArrayList<Integer>();
-
-
for
(
int
i =
0
;i>=
0
;i++){
-
offset = i*pageSize;
-
list = giftcardDAO.getGiftCardThreeDaysDue(pageSize,offset,currentTime,fourDaysTime);
-
if
(
null
!= list && list.size() >
0
) {
-
for
(GiftCard giftCard : list) {
-
Integer userId = giftCard.getUserId();
-
userIdList.add(userId);
-
}
-
}
-
if
(
null
!= list && list.size() >
0
&& list.size() < pageSize){
-
break
;
-
}
-
}
这里利用了for循环的break跳出,优化代码简化逻辑,而且减少了对数据库的访问次数。
补充:这里也顺便介绍下java跳出for循环的break和continue语句;
“break”语句用来结束循环,即不再执行后边的所有循环。
示例:计算1+2+3+4......+100的结果。
[java]
view plain
-
public
class
example1{
-
public
static
void
main(String[] args){
-
int
result=
0
;
-
for
(
int
i=
1
;i<=
100
;i++){
-
if
(i>
50
)
break
;
-
result+=i;
-
}
-
System.out.println(result);
-
}
-
}
输出结果:
分析:程序只计算了1+2+3+4+......+50的结果,后边的循环全部没有执行,即当i=51的时候,循环就结束了。
另外,“break”语句可以与switch开关语句一起使用,
当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有
break语句
,则会从满足条件的地方(即与switch(表达式)括号中表达式匹配的case)开始执行,直到switch结构结束。
“continue”语句用来结束当前循环,并进入下一次循环,即仅仅这一次循环结束了,不是所有循环结束了,后边的循环依旧进行。
示例:计算1+2+3+4......+100的结果。
[java]
view plain
-
public
class
example1{
-
public
static
void
main(String[] args){
-
int
result=
0
;
-
for
(
int
i=
1
;i<=
100
;i++){
-
if
(i>
50
&&i<=
60
)
continue
;
-
result+=i;
-
}
-
System.out.println(result);
-
}
-
}
输出结果:
分析:程序计算了1+2+3+......+48+49+50+61+62+63+......+100的结果,仅仅没有对i=51,52......60进行循环。
文章目录说明语法1.
mysql
语法- 指定初始位置- 不指定初始位置- 配合offset使用2.sql server语法- 三重
循环
- 利用max(主键)- 利用row_number关键字(2005版本以上才有)- offset /fetch next(2012版本及以上才有)3.orcale语法- 采用伪列 rownum-
分页查询
一-
分页查询
二-
分页查询
三参考链接
分页查询
是为了让我们准确查询到某部分的数据,跟我们在网页的下一页那类是可以同等理解的,一页查询多少条数据,从数据的第几行开
使用
mysql
时,有很多排序规则,比如左右节点,比如子父类设置,Level等级区分等等;我们这里仅做子父类介绍,其余的其他文章在做描述结构图 注: parent 即为user_id ,这里显示顺序是: 1000 > 1010 > 1013;而我们查询出来的呢,就是 1000 下面的所有子节点, 即可用无限递增查询,不管你有多少个子节点,子子节点;结果图 代码:CREATE FUNCTI...
当数据量过大时,通常会采用
分页查询
的方式,
循环
处理数据。
比较常用的就是sql 中使用 limit 进行
分页查询
,然后for
循环
处理数据。但是这样的方式虽说可行,但是代码未免有些繁琐。
比如说:sql 语句 要写两个方法 一个count 查询所有数据数量,第二个 limit
分页
查出list
为了简化
分页查询
,可采用如下方式:
1.sql语句:user表 每次查询1000条,
这两天写了一个定时任务,关于查询表中快过期的卡,发送短信提醒,在查询中,因为生产上的数据数十万条,数据量大,如果直接一下子查出来,会对数据库造成很大的压力,用到
分页查询
,按照正常逻辑,查询表中总数量,然后根据当前页以及每页数量,
循环
对数据库进行查询; //
分页查询
,每次查询1000条数据
int pageSize = 1000;//每页数量
int page = 1;//定义总页数
MySQL
查询大量数据
分页
在上一篇文章:
MySQL
查询大量数据所面临的一些问题,说明了在
MySQL
中查询大量数据所面临的问题。遇到查询大型数据,应该怎么解决呢?和容易想到就是
分页查询
,这是一个正确的方法,应该如何
分页
?最主要就是使用
MySQL
中的LIMIT 和 OFFSET关键字,下面是示例:SELECT * FROM Orders LIMIT 30;上面查询了:“订单”的表中选择1-30(含)之...
这个专栏之前定下的计划是每周会发布一篇,但现在距离上一篇文章的发布已经过去了3个多月的时间了。希望自己从这周开始接下来坚持每周至少输出一篇文章!欢迎各位同学朋友们积极监督!
好,废话少说!现在开始进入正题。这次教给大家的开发技巧就是学会使用while或do-while这两种
循环
结构进行
分页查询
,这个
分页查询
的方式主要包括了查询数据库和调用接口这两种方式。可能这么说大家未必明白,没关系,接下来听我详细讲解。
比如有个业务需求是这样的:将系统A中所有用户的信息上报到B系统中进行数据分析。假设系统A.
<insert id="addRoleModule" parameterType="java.util.List">
INSERT INTO T_P_ROLE_MODULE (ROLE_ID, MODULE_ID)
VALUES <for.
List<String> list = new ArrayList<String>();
//入参长度限制,
分页查询
List<DemoDto> demoDtos = new ArrayList<>();
if(!...
Oracle
分页查询
语句(一):http://wu423.iteye.com/blog/510222
Oracle
分页查询
语句(二):http://wu423.iteye.com/blog/510223
Oracle
分页查询
语句(三):http://wu423.iteye.com/blog/510224