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>
为什么呢?应该怎么改啊?
[解决办法]
在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打印出来