使用动态映射

1.
<select parameterClass="string" resultMap="get-user-result" >
  <! [CDATA[
  select
    *
  from t_user

  <dynamic prepend="WHERE">
    <isNotEmpty prepend="AND" property="name">
      (name is like #name#)
    </isNotEmpty>

    <isNotEmpty prepend="AND" property="address">
      (address is like #address#)
    </isNotEmpty>
  </dynamic>
<select>

只有在页面中传入的参数name或者address不为空时,才会触发对应的where子句

2.

利用嵌套,可以实现组合查询

<dynamic prepend="WHERE">
  <isNotEmpty prepend="AND" property="name">
    (name is like #name#
    <isNotEmpty prepend="AND" property="address">
      (address is like #address#))
    </isNotEmpty>
  </isNotEmpty>
</dynamic>

只有用户提供了name的值,address的判断条件才会生效
否则只输入address的值,没有name的值,address的判断条件还是无效的


判定节点属性列表

1.一元判定

一元判定是针对属性值本身的判定,如属性是否为NULL,是否为空值等。
上面示例中isNotEmpty就是典型的一元判定。

一元判定节点有:

节点名描述
<isPropertyAvailable>      参数类中是否提供了此属性
<isNotPropertyAvailable>   与<isPropertyAvailable>相反
<isNull>                   属性值是否为NULL
<isNotNull>                与<isNull>相反
<isEmpty>                  如果属性为Collection或者String,其size是否<1,
                           如果非以上两种类型,则通过
                           String.valueOf(属性值)
                           获得其String类型的值后,判断其size是否<1
<isNotEmpty>               与<isEmpty>相反。


2. 二元判定

二元判定有两个判定参数,一是属性名,而是判定值,如
<isGreaterThan prepend="AND" property="age"
compareValue="18">
  (age=#age#)
</isGreaterThan>

节点名属性值与compareValues的关系
<isEqual>          相等。
<isNotEqual>       不等。
<isGreaterThan>    大于
<isGreaterEqual>   大于等于
<isLessThan>    小于
<isLessEqual>      小于等于

猜你喜欢

转载自chinagdvea.iteye.com/blog/1021190