e代剑客——温柔一刀
生活就像海洋,只有意志坚强的人,才能到达彼岸
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
76 随笔 :: 7 文章 :: 215 评论 :: 0 Trackbacks
随笔分类
(78)
Agile(3)
(rss)
java相关(33)
(rss)
ROR(2)
(rss)
web相关(1)
(rss)
其他(11)
(rss)
开源框架(19)
(rss)
数据库相关(8)
(rss)
生活点滴(1)
(rss)
随笔档案
(76)
2010年10月 (1)
2007年12月 (3)
2007年7月 (1)
2007年4月 (1)
2007年2月 (4)
2006年12月 (2)
2006年11月 (1)
2006年10月 (9)
2006年9月 (3)
2006年8月 (27)
2006年7月 (14)
2006年6月 (1)
2006年4月 (9)
java源码
java examples
java学习源代码检索中心
java开源大全
spring源码学习
友情连接
e代剑客—JavaEye
(rss)
开发文档
hibernate中文文档
Java2 API 规范
javascript参考手册
MySQL中文参考手册
Spring参考手册
spring进阶-IT实验室
XPath 教程
搜索
最新评论
1. re: Java应用iText动态生成PDF文件
e21e12eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
--eq23r
2. re: Toad for oracle 教程[未登录]
多谢!!!
--啊啊
3. re: Toad for oracle 教程
谢了
--后来者
4. re: Toad for oracle 教程
好人多
--hzlxm
5. re: Toad for oracle 教程
谢谢!
--stophy
阅读排行榜
1. Toad for oracle 教程(11262)
2. spring 生成Excel和PDF文件(7305)
3. javascript获取客户端网卡MAC地址和IP地址和计算机名(7278)
4. 最简单的iBatis入门例子(6602)
5. JXL操作Excel(6467)
评论排行榜
1. Toad for oracle 教程(109)
2. spring、ibatis控制oracle分页的问题 (23)
3. 最简单的iBatis入门例子(16)
4. 德比软件(DerbySoft)诚聘java工程师(上海)(10)
5. spring 生成Excel和PDF文件(7)
spring、ibatis控制oracle分页的问题
开发采用spring+ibatis,数据库用oracle,数据量有几千万以上,而且还要不断的增多,用了三层子查询实现分页控制
下面都只是举的例子
1
<
sqlMap
namespace
="Y_wjlx"
>
2
3
<
resultMap
class
="com.ctgusec.model.Y_wjlx"
id
="y_wjlx"
>
4
<
result
property
="wjbh"
column
="wjbh"
/>
5
<
result
property
="wjmc"
column
="wjmc"
/>
6
</
resultMap
>
7
<
select
id
="getAllY_wjlx"
resultMap
="y_wjlx"
>
8
<![CDATA[
9
SELECT wjbh,wjmc FROM (SELECT row_.*, rownum rownum_ FROM (select wjbh,wjmc,rownum rn from y_wjlx) row_ WHERE rownum <= #end#) WHERE rownum_ > #start#
10
]]>
11
</
select
>
12
13
</
sqlMap
>
用了个模型基类存储分页参数,模型类可以继承此类
public
class
BaseModel
{
private
Integer start
=
0
;
private
Integer end
=
30
;
private
Integer size
=
30
;
private
Integer currentPage;
private
Integer priviousPage;
private
Integer nextPage;
public
BaseModel()
{
}
public
BaseModel(Integer currentPage)
{
if
(currentPage
>
0
)
{
this
.currentPage
=
currentPage;
this
.priviousPage
=
currentPage
-
1
;
this
.nextPage
=
currentPage
+
1
;
this
.start
=
priviousPage
*
size;
this
.end
=
currentPage
*
size;
}
}
//
省略geter、serter方法
}
dao层:
1
public
class
SqlY_wjlxDao
extends
SqlMapClientDaoSupport
implements
IY_wjlxDao
{
2
3
public
List getAllY_wjlx(Y_wjlx y_wjlx)
{
4
5
return
this
.getSqlMapClientTemplate().queryForList(
"
getAllY_wjlx
"
, y_wjlx);
6
}
7
}
8
控制层:spring控制类实现分页
1
public
class
Y_wjlxListAllController
extends
AbstractController
{
2
3
Integer currentPage ;
4
5
//
y_wjlx类继承BaseModel类
6
Y_wjlx y_wjlx;
7
8
@Override
9
protected
ModelAndView handleRequestInternal(HttpServletRequest request,
10
HttpServletResponse response)
throws
Exception
{
11
String page
=
request.getParameter(
"
page
"
);
12
if
(page
==
null
||
page.equals(
"
head
"
))
{
13
currentPage
=
1
;
14
y_wjlx
=
new
Y_wjlx(currentPage);
15
request.getSession().setAttribute(
"
currentPage
"
, currentPage);
16
}
17
if
(
"
privious
"
.equals(page))
{
18
currentPage
=
(Integer) request.getSession().getAttribute(
"
currentPage
"
);
19
if
(currentPage
>
1
) currentPage
-=
1
;
20
y_wjlx
=
new
Y_wjlx(currentPage);
21
request.getSession().setAttribute(
"
currentPage
"
, currentPage);
22
}
else
if
(
"
next
"
.equals(page))
{
23
currentPage
=
(Integer) request.getSession().getAttribute(
"
currentPage
"
);
24
currentPage
+=
1
;
25
y_wjlx
=
new
Y_wjlx(currentPage);
26
request.getSession().setAttribute(
"
currentPage
"
, currentPage);
27
}
28
List list
=
this
.drv_Manager.getAllY_wjlx(y_wjlx);
29
return
new
ModelAndView(
"
y_wjlxList
"
,
"
list
"
, list);
30
}
31
32
private
IDrv_Manager drv_Manager;
33
34
public
void
setDrv_Manager(IDrv_Manager drv_Manager)
{
35
this
.drv_Manager
=
drv_Manager;
36
}
37
}
jsp页面分页调用
1
<
button
onclick
="location.href = 'y_wjlxList.shtml?page=head'"
>
首&&页
</
button
>
2
&&
3
<
button
onclick
="location.href = 'y_wjlxList.shtml?page=privious'"
>
上一页
</
button
>
4
&&
5
<
button
onclick
="location.href='y_wjlxList.shtml?page=next'"
>
下一页
</
button
>
实现了分页,而且前面的数据查询翻页效率很高,但是越到后面越慢(这个好象是没有办法的)
现在的问题是:
1、spring控制类太累赘,好象做了它不该做的事情,翻页控制有没有比较好的办法抽到服务层?
2、翻页也只有:首页、上页、下页;想把最后一页也弄出来,但是担心效率太低,首先要统计数据总数,还有就是三层子查询到了几千万数据后效率就慢了。
有没有比较好的解决办法?
posted on 2006-08-30 10:06
温柔一刀
阅读(6444)
评论(23)
编辑
收藏
所属分类:
开源框架
、
数据库相关
评论
#
re: spring、ibatis控制oracle分页的问题
2006-08-30 11:25
Tendy
--
实现了分页,而且前面的数据查询翻页效率很高,但是越到后面越慢(这个好象是没有办法的)
--
如果一个 table 有几千万数据,谁去翻页……搜索好了
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-08-30 11:46
zeroblue
看hibernate的源代码,看丫是怎么翻页的。
我没仔细看过,但相信会有提示。
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-08-30 13:10
温柔一刀
@zeroblue
hibernate调用到了最后也就是三层子查询了
SELECT wjbh,wjmc FROM (SELECT row_.*, rownum rownum_ FROM (select wjbh,wjmc,rownum rn from y_wjlx) row_ WHERE rownum <= #end#) WHERE rownum_ > #start#
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-08-30 13:11
温柔一刀
@Tendy
您说的有道理
但是客户有要求
人家是上帝啊
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-08-30 14:05
boddi
SELECT wjbh,wjmc FROM (SELECT row_.*, rownum rownum_ FROM (select wjbh,wjmc,rownum rn from y_wjlx) row_ WHERE rownum <= #end#) WHERE rownum_ > #start#
中的select wjbh,wjmc,rownum rn from y_wjlx不会造成很大的效率问题吗?
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-08-30 14:18
why
老大,你的代码真是丑陋,看着真累
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-08-30 14:26
温柔一刀
@why
Sorry,影响了您的视觉,偶也知道很丑陋,想改进它,谢谢您
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-08-30 14:27
温柔一刀
@boddi
这个应该算效率比较高的查询了
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-08-31 18:21
boddi
SELECT wjbh,wjmc FROM (SELECT row_.*, rownum rownum_ FROM (select wjbh,wjmc,rownum rn from y_wjlx) row_ WHERE rownum <= #end#) WHERE rownum_ > #start#
在SQLSERVER中无法实现啊!请问SQLSERVER有何高招吗?谢谢
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-08-31 19:09
温柔一刀
@boddi
这个语句只能在oracle用
SQLSERVER应该也有类似的实现
您可以google一把看看
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-09-02 15:02
Jude Zhu
<br>SELECT
<br> wjbh,
<br> wjmc
<br>FROM (
<br> SELECT
<br> ROW_NUMBER (OVER wjbh ASC) AS ROWNUMBER
<br> wjbh,
<br> wjmc
<br> FROM y_wjlx
<br>)
<br>WHERE ROWNUMBER < #end#
<br> AND ROWNUMBER > #start#
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-09-04 12:20
kimsoft
不错,希望再写一些spring+ibatis方面的blog
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-09-04 13:23
黄奕福
这样简单一些吧:
select * from
(
select rownum rownum__, t.* from mytable t where rownum < #start#
)
where rownum__ > #end#;
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-09-13 08:24
javarwx
这个分页和我们用ibatis开发的一个项目中分页的写法一样,如果不需要对数据排序的话建议可以不要用三层嵌套,可以只用两层嵌套查询,这样或许会提高些速度
只是我现在一直不是很明白ibatis提供的SqlMapClientImpl SqlMapDaoTemplate SqlMapSessionImpl这三个类有什么不同,希望指教
QQ:66116103
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-09-13 10:18
温柔一刀
@javarwx
看了下源码,SqlMapClientImpl ,SqlMapSessionImpl实现了同一个父类,我也没有搞清楚,惭愧,另外,好象没有SqlMapDaoTemplate 这个类吧,待我在仔细研究下源码,谢谢您的建议
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-10-15 17:00
曲静波
@Tendy
如果一个 table 有几千万数据,谁去翻页……搜索好了
有道理.但如果要是可以选择页码,链出末页,效率显然就低了~
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2006-10-15 17:01
曲静波
应该不会低很多,客户应该从易用性角度考虑.
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2007-01-12 10:25
♂蜜蜂㊣仔仔gz
代码不能重用,应以复用未主要开发目的。分页嵌套比较正常,效率不会降低多少,复用应该是以参数形式传入sql,动态字段实现select count(1) from table 总量计算,当前页面计算等工作,最好以标签形式嵌套页面,免去维护问题。总的来说做的是不错的。
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2007-04-10 11:47
rjbj
请问用mysql,该怎么写?谢谢。
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2008-04-21 20:28
soei
蜜蜂㊣仔仔gz
说的对,
跟我现在做的一样,花几天时间debug ibatis的源码,做出来效果不错
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2008-05-19 18:31
asd
rdthert
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题
2008-05-19 18:32
asd
aaaaaaaaaaaaaaaaa
回复
更多评论
#
re: spring、ibatis控制oracle分页的问题 [未登录]
2008-05-19 18:35
java爱好者
您好!最近在学ibatis,想用spring+ibatis做个分页,但我发现了个问题,就是
SELECT wjbh,wjmc FROM (SELECT row_.*, rownum rownum_ FROM (select wjbh,wjmc,rownum rn from y_wjlx) row_ WHERE rownum <= #end#) WHERE rownum_ > #start#
假如页面上有很多的查询条件,有的值用户可以输入,也可不输入,你这里的sql语句不就不能在改变了,我觉得sql语句应该是动态的才好!但这样是不是就不能满足动态变sql,我是Ibatis初学者,不知道有什么好的解决方案?请赐教
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
使用OpenSessionInView模式时的一个异常问题解决方法
sping 、jxl 生成excel文件下载
spring 生成Excel和PDF文件
关于Acegi安全框架登陆后转向的疑问
使用Acegi 1.0获取用户信息
Spring+Hibernate中OpenSessionInView模式运用
spring、ibatis控制oracle分页的问题
ibatis 自带分页方法
Spring-Validator 说明文档
spring对commons_fileupload和cos_fileuplaod的封装
Powered by:
BlogJava
Copyright © 温柔一刀
联系偶
zhupanjava@gmail.com
温柔一刀