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; }
不知道还有没有其他的方法,欢迎讨论,各抒己见!