欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ibatis多条件查询

程序员文章站 2024-03-03 16:49:04
...
[b]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?
String sql= " brno like"+ b +"and pigday" = p;// b和p都是变量。  
String sql= " brno like"+ b +"and pigday" = p;// b和p都是变量。 

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

view plaincopy to clipboardprint?
brList = sqlMap.queryForList("CR.getBrno", sql);   
brList = sqlMap.queryForList("CR.getBrno", sql);  

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

2,直接在映射文件中配置参数
映射文件这样写:

view plaincopy to clipboardprint?
<!-- 多条件查询-->  
<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>   
<!-- 多条件查询-->
<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?
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;   
 }  

 

3、动态查询方法

详细