ibatis 多条件查询

1、在java代码中使用字符串拼接
映射文件中这样写:

Xml代码 复制代码
  1. <select id="getBrno" parameterClass="java.lang.String" resultMap="bctlResult">       
  2.     select brno,brname from bctl where $sql$       
  3. </select>  

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

 

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

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

 

Java代码 复制代码
  1. brList = sqlMap.queryForList("CR.getBrno", sql);     

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

 

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

 

Xml代码 复制代码
  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>   

java文件中这样调用:

 

Java代码 复制代码
  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.  }  

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