在iBatis中,普通的变量,比如:v,是使用#号,如:#v#。
这样,iBatis会使用prepareStatement,并对变量进行变量绑定。
而$符号是简单替代的用法,在数据库的执行效率上要比前一种差, 如$value$
如果你需要迭代list, 可以如下:
<select id="listNames" parameterClass="list" resultClass="name"> <![CDATA[ select name from t_name ]]> <iterate conjunction="or" prepend="where" property="brandname"> name ilike #name[]# </iterate> </select>
但是没能模糊查询,想到用$, 但不成功.
<select id="listNames" parameterClass="list" resultClass="name"> <![CDATA[ select name from t_name ]]> <iterate conjunction="or" prepend="where" property="searchname"> name ilike '%$searchname[]$%' </iterate> </select> 严重: Servlet.service() for servlet action threw exception com.ibatis.common.beans.ProbeException: There is no READABLE property named 'searchname ' in class 'java.util.Arrays$ArrayList' at com.ibatis.common.beans.ClassInfo.getGetter(ClassInfo.java:259) at com.ibatis.common.beans.ComplexBeanProbe.getProperty(ComplexBeanProbe.java:304) at com.ibatis.common.beans.BaseProbe.getIndexedProperty(BaseProbe.java:56) at com.ibatis.common.beans.GenericProbe.getObject(GenericProbe.java:54)
用Map是可以的,目前还没高明白,请友人告知!
<select id="listNames" parameterClass="map" resultClass="name"> <![CDATA[ select name from t_name ]]> <iterate conjunction="or" prepend="where" property="searchname"> name ilike '%$searchname[]$%' </iterate> </select>