服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > 专题栏目 > IBATIS专题 > 查看文档

ibatis的dynamic-mapped-statement

  当自已还不知道有动态sql语句时,会了满足用户可以输入不同的查询条件,返回不同的结果集时,就手动写了N个dao方法与mapped-statement,还要判断不同的条件选择不同的dao方法,那个叫烦。现在好了,有了ibatis的dynamic-mapped-statement一个顶过去N个。

  比如用户可以输入orderState,orderid,orderDate不同的输入组合返回不同的结果集。

  • 用户只要有输入orderid时,就只返回1个或0个个结果集.因为orderid是唯一的!
  • 用户只输入orderState
  • 输入orderDate,根据orderDate与orderState返回(我的jsp页面orderState是必需的)

   现在只有三个组合,可以如果orderState不是必需时,就会多一种可能了,现在有三种条件,如果业务增加的话,可组合的条件就会更加多了。显而易现的ibatis的动态sql就体现出它的好处!

   三个mapped-statement就可以简写成以下这种方式!

  <dynamic-mapped-statement result-map="result">
    select
        BILLADDR1, BILLADDR2, BILLCITY, BILLCOUNTRY, BILLSTATE,
        BILLTOFIRSTNAME, BILLTOLASTNAME, BILLZIP, SHIPADDR1,
        SHIPADDR2, SHIPCITY, SHIPCOUNTRY, SHIPSTATE, SHIPTOFIRSTNAME,
        SHIPTOLASTNAME, SHIPZIP, CARDTYPE, COURIER, CREDITCARD,
        EXPRDATE, LOCALE, ORDERDATE, ORDERS.ORDERID, TOTALPRICE,
        USERID, DELIVERYMETHODID, ADDITIONALCHARGE, STATUS, PAYMENTTYPE, BILLSTATEID,
        DELIVERYSHOP, SHIPSTATEID, CHECKNUMBER
    from ORDERS, ORDERSTATUS where ORDERS.USERID = #userName#
    
<dynamic>
      
<isNotNull prepend="and" property="orderId">
        ORDERS.ORDERID = #orderId# and ORDERS.ORDERID = ORDERSTATUS.ORDERID
      
</isNotNull>
      
<isNull property="orderId">
        
<isNotNull prepend="and" property="date">
          datediff(day,orderdate,#date#)=0
        
</isNotNull>
        and ORDERSTATUS.STATUS = #states#
      
</isNull>
    
</dynamic>
  
</dynamic-mapped-statement>

    构造一个封装类把要查询的条件封装起来,把要查询的条件set到类对象中,把它当参数传到statement查询语句中,以后要增加一个查询条件时,就在这个类新增一个属性,修改一下dynamic-mapped-statement,ok!

扫描关注微信公众号