[转]ibatis 的多条件查询

 

ibatis自带的入门例子中,查询条件只有一个。多数情况下,查询条件都是多个的。如果要实现多条件查询,如何实现?

百度了一下,有以下解决方案:

1,在java代码中使用字符串拼接

映射文件中这样写:

 

view plaincopy to clipboardprint?

 

   <select id="getBrno" parameterClass="java.lang.String" resultMap="bctlResult">      

    select brno,brname from bctl where $sql$   

   </select>  

 

<select id="getBrno" parameterClass="java.lang.String" resultMap="bctlResult"> select brno,brname from bctl where $sql$ </select>

 

然后再java文件中拼写出SQL的条件语句: 

 

view plaincopy to clipboardprint?

 

   1. String sql= " brno like"+ b +"and pigday" = p;// b和p都是变量。  

 

String sql= " brno like"+ b +"and pigday" = p;// b和p都是变量。

 

再在方法中调用传递进去:

 

view plaincopy to clipboardprint?

 

   1. brList = sqlMap.queryForList("CR.getBrno", sql);   

 

brList = sqlMap.queryForList("CR.getBrno", sql);

 

这是一种方法,很明显这种方法有一种弊端,就是sql语句需要写在java源文件中。如果需要更改查询条件,就不得不修改java文件,再重新编译。这与ibatis的本意有些违背。

因此本人没有测试过以上方法是否可行。

 

2,直接在映射文件中配置参数

映射文件这样写:

 

view plaincopy to clipboardprint?

 

   1. <!-- 多条件查询-->  

   2. <parameterMap   id="myParam"   class="java.util.HashMap">     

   3.   <parameter   property="id"/>     

   4.   <parameter   property="name"/>     

   5. </parameterMap>     

   6. <select   id="multConQuery" parameterMap="myParam" resultClass="Department">     

   7.     select * from department where id = ? and name = ?       

   8. </select>   

 

<!-- 多条件查询--> <parameterMap id="myParam" class="java.util.HashMap"> <parameter property="id"/> <parameter property="name"/> </parameterMap> <select id="multConQuery" parameterMap="myParam" resultClass="Department"> select * from department where id = ? and name = ? </select>

 

java文件中这样调用:

 

view plaincopy to clipboardprint?

 

   1. public Department queryDepartmentByIdAndName(int id,String name)  

   2. {  

   3.     Department dept = new Department();  

   4.     try  

   5.     {  

   6.         sqlMapClient.startTransaction();  

   7.         HashMap hmParam = new HashMap();  

   8.         hmParam.put("id",id);  

   9.         hmParam.put("name",name);  

  10.         sqlMapClient.queryForObject("multConQuery",hmParam,dept);  

  11.         sqlMapClient.commitTransaction();  

  12.     }  

  13.     catch(Exception e)  

  14.     {  

  15.         e.printStackTrace();  

  16.     }  

  17.     return dept;  

  18.  }  

 

public Department queryDepartmentByIdAndName(int id,String name) { Department dept = new Department(); try { sqlMapClient.startTransaction(); HashMap hmParam = new HashMap(); hmParam.put("id",id); hmParam.put("name",name); sqlMapClient.queryForObject("multConQuery",hmParam,dept); sqlMapClient.commitTransaction(); } catch(Exception e) { e.printStackTrace(); } return dept; }

 

 不知道还有没有其他的方法,欢迎讨论,各抒己见!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值