动态Mapped Statement是如何在iBATIS中应用呢?让我们先看看实例:
Java代码
- ﹤select id="dynamicGetAccountList" cacheModel="account-cache" resultMap="account-result"﹥
- select * from ACCOUNT
- ﹤isGreaterThan prepend="and" property="id" compareValue="0"﹥
- where ACC_ID=#id#
- ﹤/isGreaterThan﹥
- order by ACC_LAST_NAME
- ﹤/select﹥
例子说明:
如果值小于0,那么sql语句就是:
Java代码
- select * from ACCOUNT
- order by ACC_LAST_NAME
动态Mapped Statement应用更复杂的例子:
Java代码
- ﹤select id="dynamicGetAccountList" resultMap="account-result"﹥
- select * from ACCOUNT
- ﹤dynamic prepend="WHERE"﹥
- ﹤isNotNull prepend="AND" property="firstName"﹥
- (ACC_FIRST_NAME=#firstName#
- ﹤isNotNull prepend="OR" property="lastName"﹥
- ACC_LAST_NAME=#lastName#
- ﹤/isNotNull﹥
- )
- ﹤/isNotNull﹥
- ﹤isGreaterThan prepend="and" property="id" compareValue="0"﹥
- ACC_ID=#id#
- ﹤/isGreaterThan﹥
- ﹤/dynamic﹥
- order by ACC_LAST_NAME
- ﹤/select﹥
动态Mapped Statement实例注解:
prepend:可被覆盖的SQL语句组成部分
property:被比较的属性
compareProperty:另一个用于和前者比较的属性
compareValue用于比较的值
﹤isEqual﹥
﹤isNotEqual﹥
﹤isGreaterThan﹥
﹤isGreaterEqual﹥
﹤isLessThan﹥
﹤isLessEqual﹥
﹤isPropertyAvailable﹥:检查是否存在该属性
﹤isNotPropertyAvailable﹥:
﹤isNull﹥:检查属性是否为null
﹤isNotNull﹥
﹤isEmpty﹥:检查Collection.size()的值,属性String或String.valueOf()值是否为null或空
﹤isNotEmpty﹥:
﹤isParameterPresent﹥:检查是否存在参数对象(不为null)
﹤iterate﹥遍历集合:
Java代码
- ﹤iterate prepend="and" property="userNameList" open="(" close=")" conjunction="or"﹥
- username=#userNameList[]#
- ﹤/iterate﹥
property属性:类型为java.util.List的用于遍历的元素
open属性:整个遍历内容开始的字符串,用于定义括号
close属性:整个便利内容结束的字符串
conjunction:每次遍历内容之间的字符串,用于定义AND或OR
动态Mapped Statement在iBATIS中的应用就向你介绍到这里,对它了解些了么?
【编辑推荐】