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

林炳文Evankaka原创作品。转自https://blog.csdn.net/Evankaka/article/details/45671473

             本文要实现Mybatis多参数查询与列表查询不同方式实现,以一个实例来说明。

本文示例工程下载

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

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


    
    
  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


    
    
  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);  

    
    
  1. /**
  2. * 注意要和Employeer.xml的方法名对应
  3. */
  4. public List<Employeer> findEmployeerByName(String employeer_name);

测试:


    
    
  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. public static void main(String[] args) {
  18. List<Employeer> employeers=getEmployeerList( "张三");
  19. for(Employeer employeer:employeers){
  20. System.out.println(employeer);
  21. }
  22. }

结果:


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

二、多参数查询

(1)方法一


EmployeerMapper中定义


    
    
  1. /**
  2. * 多参数查询,注意要和Employeer.xml的方法名对应
  3. */
  4. public List<Employeer> findEmployeerByNameandDep(String employeer_name,String employeer_department);
Employeer.xml中定义


    
    
  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>

    
    
  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开始


测试代码:


    
    
  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. }


    
    
  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"


    
    
  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中添加

    
    
  1. /**
  2. * 多参数查询,注意要和Employeer.xml的方法名对应
  3. */
  4. public List<Employeer> findEmployeerByNameandDep1(Map<String,String> map);
Employeer.xml中添加:


    
    
  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的名字是那个就在#{}使用那个。

测试使用:


    
    
  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. }


    
    
  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:

结果:


本文示例工程下载

林炳文Evankaka原创作品。转自https://blog.csdn.net/Evankaka/article/details/45671473

             本文要实现Mybatis多参数查询与列表查询不同方式实现,以一个实例来说明。

本文示例工程下载

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

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


  
  
  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


  
  
  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);  

  
  
  1. /**
  2. * 注意要和Employeer.xml的方法名对应
  3. */
  4. public List<Employeer> findEmployeerByName(String employeer_name);

测试:


  
  
  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. public static void main(String[] args) {
  18. List<Employeer> employeers=getEmployeerList( "张三");
  19. for(Employeer employeer:employeers){
  20. System.out.println(employeer);
  21. }
  22. }

结果:


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

二、多参数查询

(1)方法一


EmployeerMapper中定义


  
  
  1. /**
  2. * 多参数查询,注意要和Employeer.xml的方法名对应
  3. */
  4. public List<Employeer> findEmployeerByNameandDep(String employeer_name,String employeer_department);
Employeer.xml中定义


  
  
  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>

  
  
  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开始


测试代码:


  
  
  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. }


  
  
  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"


  
  
  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中添加

  
  
  1. /**
  2. * 多参数查询,注意要和Employeer.xml的方法名对应
  3. */
  4. public List<Employeer> findEmployeerByNameandDep1(Map<String,String> map);
Employeer.xml中添加:


  
  
  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的名字是那个就在#{}使用那个。

测试使用:


  
  
  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. }


  
  
  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:

结果:


本文示例工程下载

猜你喜欢

转载自blog.csdn.net/weixin_42581112/article/details/88895975