Mybatis多参数查询与列表查询不同方式实现

来源:互联网 发布:如何评价慈禧太后知乎 编辑:程序博客网 时间:2024/06/04 17:55

一、查询所有数据,返回List

查询出列表,也就是返回list, 在我们这个例子中也就是 List<Employeer> , 这种方式返回数据,需要在Employeer.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <!-- 定义数据库字段与实体对象的映射关系 -->  
  2. <resultMap type="Employeer" id="resultMap">  
  3.    <id property="employeer_id" column="employeer_id"/>   
  4.    <result property="employeer_name" column="employeer_name"/>  
  5.    <result property="employeer_age" column="employeer_age"/>  
  6.    <result property="employeer_department" column="employeer_department"/>  
  7.    <result property="employeer_worktype" column="employeer_worktype"/>  
  8. </resultMap>  
id、result是最简单的映射,id为主键映射;result其他基本数据库表字段到实体类属性的映射。

查询列表的语句在 Employeer.xml 

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->  
  2.     <select id="findEmployeerByName" parameterType="string" resultMap="resultMap">  
  3.         select * from `t_employeer` where employeer_name like #{employeer_name}  
  4.     </select>  
在EmployeerMapper 接口中增加方法:public List<Employeer> findEmployeerByName(String employeer_name);   
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * 注意要和Employeer.xml的方法名对应 
  3.  */  
  4. public List<Employeer> findEmployeerByName(String employeer_name);     

测试:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * 查询列表 
  3.  */  
  4. public static List<Employeer> getEmployeerList(String employeer_name){  
  5.     SqlSession session = null;  
  6.      List<Employeer> employeers=null;  
  7.     try {  
  8.         session = sqlSessionFactory.openSession();   
  9.         EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);  
  10.          employeers = employeerMapper.findEmployeerByName(employeer_name);    
  11.            session.commit() ;         
  12.     } finally {  
  13.         session.close();  
  14.     }  
  15.     return employeers;  
  16.     
  17.    }  
  18. public static void main(String[] args) {                              
  19.     List<Employeer> employeers=getEmployeerList("张三");  
  20.      for(Employeer employeer:employeers){  
  21.             System.out.println(employeer);  
  22.         }  
  23.   
  24. }  

结果:


其中的数据的之前插入的,现在要查找张三的列表全部都列出来了。

二、多参数查询

(1)方法一


EmployeerMapper中定义

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * 多参数查询,注意要和Employeer.xml的方法名对应 
  3.  */  
  4. public List<Employeer> findEmployeerByNameandDep(String employeer_name,String employeer_department);  
Employeer.xml中定义

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <!-- 定义数据库字段与实体对象的映射关系 -->  
  2. <resultMap type="Employeer" id="resultMap">  
  3.    <id property="employeer_id" column="employeer_id"/>   
  4.    <result property="employeer_name" column="employeer_name"/>  
  5.    <result property="employeer_age" column="employeer_age"/>  
  6.    <result property="employeer_department" column="employeer_department"/>  
  7.    <result property="employeer_worktype" column="employeer_worktype"/>  
  8. </resultMap>  
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <!--多参数 查找 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->  
  2.      <select id="findEmployeerByNameandDep"  resultMap="resultMap">  
  3.      select* from `t_employeer` where employeer_name=#{0} and employeer_department=#{1}  
  4.      </select>   
由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始


测试代码:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * 多参数查询列表 
  3.  */  
  4. public static List<Employeer> getEmployeerList(String employeer_name,String employeer_department){  
  5.     SqlSession session = null;  
  6.      List<Employeer> employeers=null;  
  7.     try {  
  8.         session = sqlSessionFactory.openSession();   
  9.         EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);  
  10.          employeers = employeerMapper.findEmployeerByNameandDep(employeer_name, employeer_department);  
  11.            session.commit() ;         
  12.     } finally {  
  13.         session.close();  
  14.     }  
  15.     return employeers;  
  16.     
  17.    }  

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public static void main(String[] args) {     
  2.      System.out.println("=========================使用多单参数查询===========================");  
  3.      List<Employeer> employeers1=getEmployeerList("张三","产品二部");  
  4.      for(Employeer employeer1:employeers1){  
  5.          System.out.println(employeer1);  
  6.      }  

结果:


方法二:

将 resultMap="resultMap" 改成 resultType="Employeer"

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <!--多参数 查找 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->  
  2.      <select id="findEmployeerByNameandDep"  resultType="Employeer">  
  3.      select* from `t_employeer` where employeer_name=#{0} and employeer_department=#{1}  
  4.      </select>   
方法三:Map封装多参数
EmployeerMapper.java中添加
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * 多参数查询,注意要和Employeer.xml的方法名对应 
  3.  */  
  4. public List<Employeer> findEmployeerByNameandDep1(Map<String,String> map);  
Employeer.xml中添加:

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <!--多参数 查找 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的,注意key1和key2为传入的map的键值 -->  
  2. <select id="findEmployeerByNameandDep1" parameterType="map" resultType="Employeer">  
  3. select* from `t_employeer` where employeer_name=#{key1} and employeer_department=#{key2}  
  4. </select>   

其中map是mybatis自己配置好的直接使用就行。map中key的名字是那个就在#{}使用那个。

测试使用:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * 多参数查询列表,使用map 
  3.  */  
  4. public static List<Employeer> getEmployeerList(Map<String, String> map){  
  5.     SqlSession session = null;  
  6.      List<Employeer> employeers=null;  
  7.     try {  
  8.         session = sqlSessionFactory.openSession();   
  9.         EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);  
  10.          employeers = employeerMapper.findEmployeerByNameandDep1(map);  
  11.            session.commit() ;         
  12.     } finally {  
  13.         session.close();  
  14.     }  
  15.     return employeers;  
  16.     
  17.    }  

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. System.out.println("=========================使用多单参数map方式查询===========================");  
  2. Map<String, String> map = new HashMap<String, String>();   
  3. map.put("key1""明明");   
  4. map.put("key2""财会部");  
  5. List<Employeer> employeers2=getEmployeerList(map);  
  6. for(Employeer employeer2:employeers2){  
  7.           System.out.println(employeer2);  
  8.       }  

一定要注意key:

结果:


本文示例工程下载

0 0