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

映射文件:

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

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

DAO层:

Java代码 收藏代码
  1. publicListgetProductDynamic2(Productproduct)throwsSQLException{
  2. init();
  3. Listlist=(List)sqlMapClient.queryForList("getProductDynamic2",product);
  4. returnlist;
  5. }

TEST类:

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

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

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

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

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

你可能感兴趣的:(ibatis)