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、动态查询方法

详细

 

你可能感兴趣的:(java,sql,ibatis,百度)