当前位置: 代码迷 >> Java Web开发 >> ibatis中dynamic的一点异常,帮小弟我查下。多谢
  详细解决方案

ibatis中dynamic的一点异常,帮小弟我查下。多谢

热度:8873   发布时间:2013-02-25 21:17:28.0
ibatis中dynamic的一点错误,帮我查下。谢谢
<select id="queryPersonList" parameterClass="staff" resultClass="staff">
  select * from test 
<dynamic prepend="where">
<isNotEmpty prepend="and" property="username">username=#username#</isNotEmpty>
<isNotEmpty prepend="and" property="password">password=#password#</isNotEmpty>
</dynamic> 
</select>
运行上面代码一直 报错ORA-00933:
但是如果这样写就没错,
<select id="queryPersonList" parameterClass="staff" resultClass="staff">
select * from test where test.username=#username# and test.password=#password#
</select>
为什么呢?应该怎么改啊?

------解决方案--------------------------------------------------------
HTML code
在Ibatis中<dynamic/>是Ibatis的动态查询条件,根据该属性中所包含的元素进行判断是否执行某一条SQL语句。1、使用dynamic时select * from Person表        <dynamic prepend="where">                <isNotNull property="name" prepend="and">                    name=#name#                </isNotNull>                <isNotNull property="sex" prepend="and">                    sex=#sex#                </isNotNull>                      </dynamic>结果当name、sex都非null时打出如下的SQL语句:select Person表 where (and) name= ? , and sex= ?,很显然执行语句时,name前的and已经自动清除。2、不使用dynamic时select * from Person表                       <isNotNull property="name" prepend="and">                    name=#name#                </isNotNull>                <isNotNull property="sex" prepend="and">                    sex=#sex#                </isNotNull>          结果当name、sex都非null时打出如下的sql语句:select * Person表 where and name= ? , and sex= ?,出现语句错误。
------解决方案--------------------------------------------------------
可能因为你and 或者 where 后面没加空格?或者啥的 最好把sql打印出来
  相关解决方案