dao层查询函数语句
public List<Users> findUserPage(int start, int end) {
return this.getSqlMapClientTemplate().queryForList("findByPage", start, end);
}sqlmap中的语句这样:
<select id="findByPage" parameterClass="int" resultClass="user">
select * from (select sid,sname,ssex,sminzu,shome,smajor,scollege,sbirth,rownum rn from test_xs_student t where  rownum  <= $end$ order by t.sid) where  rn > $start$</select>刚学ibatis,只是想运行起来这样简单的例子,我用的是oracle数据库,简单的增删改查都实现了,这个是我想实现从开始记录到结束记录之间的查找实现不了,我想知道我的dao层函数用法对吗?我看有的是见一个类里面封装了start,end等对象,让后通过这个对象给sqlmap里面的变量赋值。和我直接用两个int都一样实现吗?还有我这里写parameterClass="int"对吗?

解决方案 »

  1.   

    准确的说应该是java.lang.Integer...
      

  2.   

    int也可以的吧。我觉得问题不在这里..queryForList("findByPage", start, end)这个内部本来就是分页的,为什么sqlmap里面还要用3层嵌套呢?
      

  3.   

    楼主,你直接写死一个sql不用传参看看有问题木有
      

  4.   

    一般是用 parameterClass="java.lang.Integer" 这样为了减少点歧义,
    但是 ibatis 内置了字符串对应:比如 int 就是 java.lang.Integer,float 就是 java.lang.Float
    你简写没有问题,对应上就可以。你想实现真正的分页可以自己写sql直接实现。也可以http://blog.csdn.net/APOLLO_TS/archive/2010/02/24/5322156.aspx  mysql数据库
      

  5.   

    作为多个参数,我都是将参数放到一个MAP中的,没像楼主这样写过。
      

  6.   

    public List<Users> findUserPage(int start, int end) {
    Map<String, Integer> params = new HashMap<String, Integer>();
    params.put("start", start);
    params.put("end", end);
    return this.getSqlMapClientTemplate().queryForList("findByPage", params);
    }<select id="findByPage" parameterClass="java.util.Map" resultClass="user">这样试试
      

  7.   

    这个sql语句有问题吧:
    select * from (select sid,sname,ssex,sminzu,shome,smajor,scollege,sbirth,rownum rn from test_xs_student t where rownum <= $end$ order by t.sid) where rn > $start$
    rownum是查询后加上去的,如果在查询中,你用它做为条件,应该没有一条记录吧