设为首页 收藏本站
查看: 791|回复: 0

[经验分享] Ibatis动态sql实现MySql SqlServer Oracle分页

[复制链接]
YunVN网友  发表于 2016-8-16 06:03:02 |阅读模式
最近在看iBatis时,想做用动态Sql做个分布。因为在做项目时用iBator工具生成没有分页的功能,只有一些我们常用的功能。所以要对生成后的代码做修改。我在Java高手真经的一书中看到有做了MySql SqlServer Oracle的分页。实现如下:
MySql-->
首先说说MySql的分页语句

select * from user where...order by... limit 10,25   

根据以上的语句我们可以对ibator生成后的代码进行修改。
第一修改User_sqlMap.xml
修改前

<select id="ibatorgenerated_selectByExample"         resultMap="ibatorgenerated_BaseResultMap"
parameterClass="com.demo.ibatis.beans.UserExample">
select ID, LOGIN_NAME, PASSWORD
from user
<isParameterPresent>
<include refid="user.ibatorgenerated_Example_Where_Clause" />
<isNotNull property="orderByClause">
order by $orderByClause$
</isNotNull>
</isParameterPresent>
</select>

修改后

<select id="ibatorgenerated_selectByExample" resultMap="ibatorgenerated_BaseResultMap"
parameterClass="com.demo.ibatis.beans.UserExample">
select ID, LOGIN_NAME, PASSWORD
from user
<isParameterPresent>
<include refid="user.ibatorgenerated_Example_Where_Clause" />
<isNotNull property="orderByClause">
order by $orderByClause$
</isNotNull>
<isNotNull property="limitClauseStart">
limit
$limitClauseStart$,$limitClauseCount$
</isNotNull>

</isParameterPresent>
</select>

重要的是黑色的字体是添加到原来的xml中的。接下来修改UserExample.java
在该类中添加两个字段和相应的getter/setter方法

protected String limitClauseStart;//起始参数
protected String limitClauseCount;//数量参数

接下来就可以通过Dao调用selectByExample()方法测试,好的以上就是MySql的分页。SqlServer的分页比较难了,因为 SqlServer中没有limit的关键字。
看看SqlServer的分页语句,那当然 SqlServer人分布方法有很多种。这里我采用其中的一种。
语句如下:

SELECT TOP 页大小 *
FROM TestTable
WHERE (ID >=
(select max(id) from (SELECT TOP 页大小*页数 id
FROM 表
ORDER BY id) as t))
ORDER BY ID

接下来和上面的MySql一样也进行修改
修改xml

<select id="ibatorgenerated_selectByExample" resultMap="ibatorgenerated_BaseResultMap"
parameterClass="com.demo.ibatis.beans.UserExample">
<isNotNull property="limitClauseStart">
SELETE TOP $limitClauseCount$ * FROM user where (ID NOT IN
(SELECT TOP $limitClauseStart$ ID
</isNotNull>

<isNull property="limitClauseStart">
SELETE *
</isNull>
FROM user
from user
<isParameterPresent>
<include refid="user.ibatorgenerated_Example_Where_Clause" />
<isNotNull property="orderByClause">
order by $orderByClause$
  <isNotNull property="limitClauseStart">
))order by $orderByClause$
</isNotNull>

</isNotNull>
</isParameterPresent>
</select>

接下来是ORacle的,和上面都是差不多的这里不多说。
语法:
select* from(select rownum tid,user.* FROM (select * from user where id>1 order by ID desc)user where where rownum<35) where tid>10;
修改Xml,

<select id="ibatorgenerated_selectByExample"     resultMap="ibatorgenerated_BaseResultMap"
parameterClass="com.demo.ibatis.beans.UserExample">
<isNotNull property="limitClauseStart">
select* from(select rownum tid,user.* FROM (
</isNotNull>

select * from user
<isParameterPresent>
<include refid="user.ibatorgenerated_Example_Where_Clause" />
<isNotNull property="orderByClause">
order by $orderByClause$              
</isNotNull>
  <isNotNull property="limitClauseStart">
<![[CDATA )user where where rownum<$limitClauseCount$+$limitClauseStart$+1) where tid>$limitClauseStart$;]]>
</isNotNull>

</isParameterPresent>
</select>

好的以上就是这次的代码,如果有错的请帮我指点一下...

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-258150-1-1.html 上篇帖子: Mysql、SqlServer和Oracle主键自动增长的设置 下篇帖子: Oracle从创建用户到创建数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表