现在的位置: 首页 > 综合 > 正文

【Ibatis】(六)、动态SQL查询

2013年11月15日 ⁄ 综合 ⁄ 共 2050字 ⁄ 字号 评论关闭

映射文件:

Xml代码  收藏代码
  1. <select id="getProductDynamic2" resultMap="get-product-result" parameterClass="product">  
  2.             <![CDATA[ 
  3.                 select * from t_product 
  4.             ]]>    
  5.                 <dynamic prepend="WHERE">  
  6.                     <isNotNull prepend="AND" property="price">  
  7.                         prd_price=#price#  
  8.                     </isNotNull>  
  9.                     <isNotEmpty prepend="AND" property="description">  
  10.                         prd_description=#description#  
  11.                     </isNotEmpty>  
  12.                 </dynamic>  
  13.                   
  14.         </select>  

 注意:CDATA不应包括<dynamic>节点,否则标签不起作用!

DAO层:

Java代码  收藏代码
  1. public List getProductDynamic2(Product product) throws SQLException {  
  2.         init();  
  3.         List list = (List)sqlMapClient.queryForList("getProductDynamic2", product);  
  4.         return list;  
  5.     }  

 TEST类:

Java代码  收藏代码
  1. public void getProductDynamic2() throws SQLException {  
  2.         Product product = new Product();  
  3.         product.setPrice(206.99d);  
  4.         product.setDescription("basketball");  
  5.         List list1 = productDao.getProductDynamic2(product);  
  6.         for(Iterator it=list1.iterator(); it.hasNext();) {  
  7.             Product prd = (Product)it.next();  
  8.             System.out.println(prd);  
  9.         }  
  10.           
  11.           
  12.         /** 
  13.          * 注意:product2里的price(是double型,不是Double型)的值没有设置,所以默认为初始化时的值(0),而不是NULL, 
  14.            传入到sqlmap映射文件时,被包装成Double类型(ibatis中传入参数的都是引用类型),值为0, 
  15.            这对statement里的动态语句有影响! 
  16.          */  
  17.         Product product2 = new Product();  
  18.         product2.setDescription("basketball");  
  19.         List list2 = productDao.getProductDynamic2(product2);  
  20.         for(Iterator it=list1.iterator(); it.hasNext();) {  
  21.             Product prd = (Product)it.next();  
  22.             System.out.println(prd);  
  23.         }  
  24.     }  

 

一元判定 是针对属性值本身的判定,如属性是否为NULL,是否为空值等。

<isEmpty>
检查Collection.size()的值,属性的String或String.valueOf()值,是否为null或空(“”或size() < 1)。

二元判定 有两个判定参数,一是属性名,而是判定值,如

Xml代码  收藏代码
  1. <isGreaterThan prepend="AND" property="age" compareValue="18">  
  2.         (age=#age#)  
  3. </isGreaterThan>  

 

抱歉!评论已关闭.