大家好 我有2个问题:
1、参数排序问题
  如下代码
    <typeAlias alias="Test" type="com.main.model.Test" />
    <select id="testList" resultClass="Test"  >
        select id,name from TEST t order by #sortname# #sortorder#
    </select>
#sortname# 是 列名字 #sortorder# asc 或desc
我想根据动态传来的参数来控制排序;但这样不行 1、列名好像不起作用 2、#sortorder#传过来的说是关键字。报ORA-01745: 无效的主机/绑定变量名 这个错误。2、分页问题
我想写上面一个语句知道这个语句总共多少条。我不想写2条语句。有啥好办法没;我从后台组织也行请各位大侠多多帮忙了。。

解决方案 »

  1.   

    因为你有动态变化的需求,所以你要向sql中传递参数。所以你需要指定parameterClass
    另外,列名改用$列名$包围起来试试
      

  2.   

        <select id="testList" resultClass="Test" parameterClass="Test" >
              select id,name from TEST t order by #sortname# #sortorder#
        </select>
    上面我加上parameterClass一样的。
    java.sql.SQLException: ORA-01745: 无效的主机/绑定变量名
     可能用到了传过来的是关键字 asc和desc 
    怎么做呢
      

  3.   

        <select id="testList" resultClass="Test" parameterClass="Test" >
              select id,name from TEST t order by #sortname# #sortorder#
        </select>
    上面我加上parameterClass一样的。
    java.sql.SQLException: ORA-01745: 无效的主机/绑定变量名
     可能用到了传过来的是关键字 asc和desc 
    怎么做呢
      

  4.   

    参数形式parameterClass 指定以哪种方式传入参数,你连这个都没指定 ,怎么获取参数呢?
      

  5.   

    把你的ibatis的映射文件贴出来看看啊,就这点是不行的!
      

  6.   

    <sqlMap namespace="Test">
        <typeAlias alias="Test" type="com.main.model.Test" />
        <select id="testList" resultClass="Test" parameterClass="Test" >
              select id,name from TEST t order by #sortname# $sortorder$
        </select>
    </sqlMap>$sortorder$  是asc或者desc 现在是可以了
     #sortname#  是类Test里面的属性Test就是简单的(javabean get/set)传过来的各个排序的字段;如name,id 但传过来好像不起作用
      

  7.   

    看了一个帖子,问题类似,他直接查看数据库sql,发现用#name#传过去的值,ibatis直接按照字符串解析的,这样就导致类似这样的问题,比如:order by 'id',是带引号的,所以当遇到需要本身值的时候那就都用$name$代替就可以了,把你的sortname也用$括起来就可以了