• MyBatis3_[tp-26-27]_映射文件_select_返回List_记录封装Map:返回单个元素的Map或者整体Map集合


    笔记要点
    出错分析与总结
    工程组织

    1.定义接口

    public interface EmployeeMapper {
        //多条记录封装到一个map中: Map<Integer,Employee>,键是这条记录的主键,值时记录封装后的JavaBean
        @MapKey("id")  //告诉Mybatis 封装Map的时候,使用哪个属性作为map的key,当然要对应你的下一行的Integer
        public Map<Integer,Employee>  getEmpsByLastNameLikeRetMap( String lastName);
    
        //select 的返回值类型是Map ,返回一条记录的Map,key是列名,值就是对应的值;
        public Map<String,Object> getEmpsByIdReturnMap(Integer id);
    
        //select 的返回值类型是List
        public List<Employee> getEmpsByLastNameLike( String lastName);
    
        //多个参数处理,传入map
        public Employee getEmpByMap(Map<String,Object> map);
    }

    2.定义XML映射文件  EmployeeMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.dao.EmployeeMapper"><!--namespace: 名称空间;id: 唯一标识; resultType:返回值类型; -->
    
        <!--public Map<Integer,Employee>  getEmpsByLastNameLikeRetMap( String lastName);
             如果返回的是一个集合,resultType要写Map中值 元素的类型:Employee
        -->
        <select id="getEmpsByLastNameLikeRetMap" resultType="com.bean.Employee" databaseId="mysql">
             select * from tbl_employee
            where last_name like #{lastName}
        </select>
    
        <!--public Map<String,Object> getEmpsByIdReturnMap(Integer id);
            记得更改,resultType="map"
        -->
        <select id="getEmpsByIdReturnMap" resultType="map" databaseId="mysql">
            select * from tbl_employee
            where id =#{id}
        </select>
    
        <!--public List<Employee> getEmpsByLastNameLike( String lastName);
            如果返回的是一个集合,resultType要写集合中元素的类型;
        -->
        <select id="getEmpsByLastNameLike" resultType="com.bean.Employee" databaseId="mysql">
            select * from tbl_employee
            where last_name like #{lastName}
        </select>
    
        <!--public Employee getEmpByMap(Map<String,Object> map);-->
        <select id="getEmpByMap" resultType="com.bean.Employee" databaseId="mysql">
            select * from ${table_name}
            where id = ${id} and last_name = #{lastName}
        </select>

    3.编写测试代码

    public class test_tp26 {
        public SqlSessionFactory getSqlSessionFactory() throws IOException {
            String resource = "mybatis-config.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            return new SqlSessionFactoryBuilder().build(inputStream);
        }
        @Test
        public void test06() throws Exception{
            //默认是不自动提交数据的,需要我们自己手动提交
            SqlSession openSession = getSqlSessionFactory().openSession();
            try {
                EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
    
                //1.select 返回List列表
                List<Employee> like = mapper.getEmpsByLastNameLike("%e%");
                for(Employee e:like){
                    System.out.println(e);
                }
                System.out.println("*********************");
    
                //2.select 记录封装Map,返回单条记录
                Map<String, Object> emps = mapper.getEmpsByIdReturnMap(1);
                System.out.println(emps);  //{gender=1, last_name=jerry, id=1, email=jerry@163.com}
                System.out.println("*********************");
    
                //3.select 记录封装Map,返回多组记录
                Map<Integer, Employee> emps1 = mapper.getEmpsByLastNameLikeRetMap("%e%");
                for(Map.Entry m: emps1.entrySet()){
                    System.out.println(m);
                }
               //{gender=1, last_name=jerry, id=1, email=jerry@163.com}
                System.out.println("*********************");
    
                //最后手动提交
                openSession.commit();
            }finally {
                openSession.close();
            }
        }
    }


    测试结果

    DEBUG 11-29 16:10:26,474 ==>  Preparing: select * from tbl_employee where last_name like ?   (BaseJdbcLogger.java:145) 
    DEBUG 11-29 16:10:26,493 ==> Parameters: %e%(String)  (BaseJdbcLogger.java:145) 
    DEBUG 11-29 16:10:26,505 <==      Total: 2  (BaseJdbcLogger.java:145) 
    Employee{id=1, lastname='jerry', email='jerry@163.com', gender='1'}
    Employee{id=5, lastname='葫芦娃e', email='qwq@qq.com', gender='1'}
    *********************
    DEBUG 11-29 16:10:26,506 ==>  Preparing: select * from tbl_employee where id =?   (BaseJdbcLogger.java:145) 
    DEBUG 11-29 16:10:26,506 ==> Parameters: 1(Integer)  (BaseJdbcLogger.java:145) 
    DEBUG 11-29 16:10:26,507 <==      Total: 1  (BaseJdbcLogger.java:145) 
    {gender=1, last_name=jerry, id=1, email=jerry@163.com}
    *********************
    DEBUG 11-29 16:10:26,508 ==>  Preparing: select * from tbl_employee where last_name like ?   (BaseJdbcLogger.java:145) 
    DEBUG 11-29 16:10:26,508 ==> Parameters: %e%(String)  (BaseJdbcLogger.java:145) 
    DEBUG 11-29 16:10:26,509 <==      Total: 2  (BaseJdbcLogger.java:145) 
    1=Employee{id=1, lastname='jerry', email='jerry@163.com', gender='1'}
    5=Employee{id=5, lastname='葫芦娃e', email='qwq@qq.com', gender='1'}
    *********************
  • 相关阅读:
    JDK动态代理源码分析
    使用docker-compose快速搭建本地ElasticSearch7和Elastichd环境
    IDEA导入SVN项目提示HTTPS:Server SSL certificate verification failed
    双重校验锁为什么要用volatile修饰
    Ribbon的基础知识
    Eureka的基础知识
    JDK1.8 JVM内存模型个人理解
    OAuth2+Zuul报RedisConnection.set([B[B)V解决方案
    Spring aop @aspect不生效问题
    教你使用markdown画程序流程图
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/10039069.html
Copyright © 2020-2023  润新知