锁定老帖子 主题:ibatis查询oracle分页
精华帖 (2) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-28
开发采用spring+struts+ibatis+extjs,数据库用oracle
<sqlMap namespace="RYDM" > <typeAlias alias="page" type="com.portal.util.Page" /> <typeAlias alias="abatorgenerated_RydmResult" type="com.portal.model.Rydm" /> <resultMap id="abatorgenerated_RydmResult" class="com.portal.model.Rydm" > <result column="RYDM" property="rydm" jdbcType="VARCHAR" /> <result column="RYMC" property="rymc" jdbcType="VARCHAR" /> <sql id="findByPageCondition"> <isNotEmpty property="objCondition"> <isNotEmpty property="objCondition.bmzdm"> <![CDATA[ bmzdm LIKE '%$objCondition.bmzdm$%' ]]> </isNotEmpty> <isNotEmpty property="objCondition.rymc"> <![CDATA[ AND rymc LIKE '%$objCondition.rymc$%' ]]> </isNotEmpty> </isNotEmpty> </sql> <select id="findByPage" parameterClass="page" resultClass="abatorgenerated_RydmResult"> SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (select ry.* from RYDM ry where 1=1 <dynamic prepend="AND"> <include refid="findByPageCondition" /> </dynamic> )row_ WHERE rownum <= $limit$)row_ WHERE rownum_ >$start$ ORDER BY rydm </select> <select id="findByCount" parameterClass="page" resultClass="int"> <![CDATA[ SELECT COUNT(*) FROM RYDM ry where 1=1 ]]> <dynamic prepend="AND"> <include refid="findByPageCondition" /> </dynamic> </select>
分页模型通用类
public class Page implements java.io.Serializable{ public void setPageProperty(Page page) { if(page.getStart()>0){ // 设置取数据的区间 int endPage=page.getStart()+page.getLimit(); int stratPage=page.getStart(); this.setStart(stratPage); this.setLimit(endPage); }else{ this.setLimit(page.getLimit()); this.setStart(0); } } /** 总记录数 */ private int totalProperty; /** 分页结果 */ private List root; /** 开始页码 */ private int start; /** 每页多少 */ private int limit; /** 成功与否 */ private boolean success; /** 查询条件 */ private Object objCondition;
服务层调用 public class RydmServiceImpl extends SqlMapClientDaoSupport implements RydmService { public Page findByPageRydm(Page page) throws BusinessException { page.setTotalProperty((Integer) getSqlMapClientTemplate() .queryForObject("RYDM.findByCount", page)); page.setPageProperty(page); page.setRoot(getSqlMapClientTemplate().queryForList( "RYDM.findByPage", page)); return page; }
action设置分页属性 /* * 查询用户信息 */ public String listUser() { Rydm user=new Rydm(); user.setBmzdm(request.getParameter("bmzdm").toString()); user.setRymc(request.getParameter("rymc").toString()); int start =0; int Limit=10; Page page = new Page(); try { start = Integer.valueOf(getRequest().getParameter("start")); Limit = Integer.valueOf(getRequest().getParameter("limit")); }catch (NumberFormatException e) { } page.setStart(start); page.setLimit(Limit); //使用对象作为查询参数 传入ibtais page.setObjCondition(user); page = userService.findByPage(page); } catch (BusinessException e) { log.warn("UsersAction.class查询用户信息出现异常"+e.getMessage(), e); } return SUCCESS; }
extjs 参数查询 var rydm_store = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : "/extDemo/admin/userList.action", method:"post" }), reader : new Ext.data.JsonReader({ totalProperty : 'totalProperty', root : 'root', fields : [ { name : 'bmzdm', type : 'string' } , { name : 'bmmc', type : 'string' }] }) }); var btn_search_rydm = new Ext.Button({ text : '查询', iconCls : 'icon-search', handler : queryRydm }); var queryRydm = function() { rydm_store.baseParams.bmzdm= bmzdm_search_rydn.getValue(); rydm_store.baseParams.rymc =text_search_rydm.getValue(); rydm_store.load({params : {start : 0,limit : 15}}); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-08-29
楼主也太自私了吧,打下包让新手下载有那么麻烦吗?
|
|
返回顶楼 | |
发表时间:2011-08-29
tianlongsheji 写道 楼主也太自私了吧,打下包让新手下载有那么麻烦吗? 不好意思 我这里是整个项目 东西比较多 |
|
返回顶楼 | |
发表时间:2011-08-29
最后修改:2011-08-29
tianlongsheji 写道
楼主也太自私了吧,打下包让新手下载有那么麻烦吗?
|
|
返回顶楼 | |
发表时间:2011-08-29
做广告么。。。。
|
|
返回顶楼 | |
发表时间:2011-08-29
个人认为::你这个分页是有错误的, 数据库知识需要加强阿。。。。。。阿!!!!!!!!
|
|
返回顶楼 | |
发表时间:2011-08-29
最后修改:2011-08-29
写道
做广告么。。。。
偶也来说几句,省得有人说我做广告:楼主的封装很复杂没仔细看,但看到下面的SQL语句有点感受
<select id="findByPage" parameterClass="page" resultClass="abatorgenerated_RydmResult"> SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (select ry.* from RYDM ry where 1=1 <dynamic prepend="AND"> <include refid="findByPageCondition" /> </dynamic> )row_ WHERE rownum <= $limit$)row_ WHERE rownum_ >$start$ ORDER BY rydm </select> 建议楼主把上面的分页算法屏蔽掉,对于平台的二次开发程序员来说是不需要关注如何分页的,而只需要传入分页参数就可以了。封装后应该这样写分页语句:
<select id="getCodeViewList" parameterClass="map" resultClass="dto"> SELECT codeid, field, fieldname, code, codedesc, sortno FROM codeview order by codeid , sortno </select> 数据库分页不分页由你的不同的dao调用来实现:比如dao.query4Page();这个自动拦截SQL语句并拼上分页算法。query4List()则不分页。 |
|
返回顶楼 | |
发表时间:2011-08-29
eredlab 写道
写道
做广告么。。。。
偶也来说几句,省得有人说我做广告:楼主的封装很复杂没仔细看,但看到下面的SQL语句有点感受
<select id="findByPage" parameterClass="page" resultClass="abatorgenerated_RydmResult"> SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (select ry.* from RYDM ry where 1=1 <dynamic prepend="AND"> <include refid="findByPageCondition" /> </dynamic> )row_ WHERE rownum <= $limit$)row_ WHERE rownum_ >$start$ ORDER BY rydm </select> 建议楼主把上面的分页算法屏蔽掉,对于平台的二次开发程序员来说是不需要关注如何分页的,而只需要传入分页参数就可以了。封装后应该这样写分页语句:
<select id="getCodeViewList" parameterClass="map" resultClass="dto"> SELECT codeid, field, fieldname, code, codedesc, sortno FROM codeview order by codeid , sortno </select> 数据库分页不分页由你的不同的dao调用来实现:比如dao.query4Page();这个自动拦截SQL语句并拼上分页算法。query4List()则不分页。
难道你直接用? 一看就不靠谱的分页。 还需要各位高手出来优化,让我们学习学习。 |
|
返回顶楼 | |
发表时间:2011-08-29
菜菜土人 写道
eredlab 写道
写道
做广告么。。。。
偶也来说几句,省得有人说我做广告:楼主的封装很复杂没仔细看,但看到下面的SQL语句有点感受
<select id="findByPage" parameterClass="page" resultClass="abatorgenerated_RydmResult"> SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (select ry.* from RYDM ry where 1=1 <dynamic prepend="AND"> <include refid="findByPageCondition" /> </dynamic> )row_ WHERE rownum <= $limit$)row_ WHERE rownum_ >$start$ ORDER BY rydm </select> 建议楼主把上面的分页算法屏蔽掉,对于平台的二次开发程序员来说是不需要关注如何分页的,而只需要传入分页参数就可以了。封装后应该这样写分页语句:
<select id="getCodeViewList" parameterClass="map" resultClass="dto"> SELECT codeid, field, fieldname, code, codedesc, sortno FROM codeview order by codeid , sortno </select> 数据库分页不分页由你的不同的dao调用来实现:比如dao.query4Page();这个自动拦截SQL语句并拼上分页算法。query4List()则不分页。
难道你直接用? 一看就不靠谱的分页。 还需要各位高手出来优化,让我们学习学习。 我没用啊 我用我自己的哈。 http://www.g4studio.org/ 欢迎大家下载看了以后仍鸡蛋啊! |
|
返回顶楼 | |
发表时间:2011-08-29
楼主!!服了你了!
用spring还加个struts干什么!springMVC + ibatis + ExtJS是很不错的组合! 还有,也该升级到mybatis,mybatis对缓存的支持更强大了!! |
|
返回顶楼 | |