• MyBatis(四)映射文件 之 查询的几种情况


    resultType:返回值类型,别名或者全类名,如果返回的是集合,定义集合中元素的类型。

    resultType 与 resultMap 不能同时使用。

    一、常见的查询情况

      1、查询单行数据返回单个对象

    //根据 id 查询一个员工信息
    public Employee getEmpById(Integer id);

      2、查询多行数据返回对象的集合

    //查询所有对象,返回 list 集合
    public List<Employee> getAllEmps();

      3、查询单行数据返回 Map 集合

    //以 Map 集合获取一个员工信息,key就是列名,value就是查出来的值
    public Map<String, Object> getEmpMapById(Integer id);

      4、查询多行数据返回 Map 集合

    //多条记录封装成一个 map,Map<Integer, Employee> 需要指定使用对象的哪个属性来充当 map 的 key,值是记录封装后的java对象
    //告诉 MyBatis封装这个map的时候使用哪个属性作为map的key
    @MapKey("id")
    public Map<Integer, Employee> getAllEmpMap();

      5、查询单个数据(使用聚合函数)

    //获取所有员工的数量
    public Integer getCount();

      6、EmployeeMapper 接口

    public interface EmployeeMapperBySelect {
        //根据id 查询一个员工信息
        public Employee getEmpById(Integer id);
    
        //查询所有对象,返回 list 集合
        public List<Employee> getAllEmps();
    
        //以 Map 集合获取一个员工信息,key就是列名,value就是查出来的值
        public Map<String, Object> getEmpMapById(Integer id);
    
        //多条记录封装成一个 map,Map<Integer, Employee> 需要指定使用对象的哪个属性来充当 map 的 key,值是记录封装后的java对象
        //告诉 MyBatis封装这个map的时候使用哪个属性作为map的key
        @MapKey("id")
        public Map<Integer, Employee> getAllEmpMap();
    
        //获取所有员工的数量
        public Integer getCount();
    }

      7、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.njf.mybatis.dao.EmployeeMapperBySelect">
    <!--
        namespace:名称空间,指定为接口的全类名
        id:唯一标识,方法名,需要和接口的方法名一致
        resultType:返回值类型
        #{id} 从传递过来的参数中取出id值
    -->
    <!--
        <select>:定义查询语句
        id:设置SQL语句的唯一标示
        resultType:结果类型,即实体类的全限定名
    -->
    
        <!--
            public Employee getEmpById(Integer id);
        -->
        <select id="getEmpById" resultType="com.njf.mybatis.bean.Employee">
            select id, last_name lastName, email, gender from tbl_employee where id = #{id}
        </select>
    
        <!--
           public List<Employee> getAllEmps();
           resultType:如果返回的是一个集合,要写集合中元素的类型
           指定集合中存放的类型,有多个数据,会自动转换为要返回的类型
        -->
        <select id="getAllEmps" resultType="com.njf.mybatis.bean.Employee">
            select id, last_name lastName, email, gender from tbl_employee
        </select>
    
        <!--
            public Map<String, Object> getEmpMapById(Integer id);
            指定要返回的类型,只返回一条数据
            resultType="java.util.HashMap" 或者使用别名 resultType="map"
         -->
        <select id="getEmpMapById" resultType="map">
            select * from tbl_employee where id = #{id}
        </select>
    
        <!--
            public Map<Integer, Employee> getAllEmpMap();
            指定集合中要存储的类型,有多个数据,会自动转换为要返回的类型
         -->
        <select id="getAllEmpMap" resultType="Employee">
            select * from tbl_employee
        </select>
    
        <!--
            public Integer getCount();
            指定要返回的类型,只有一个数据
         -->
        <select id="getCount" resultType="integer">
            select count(*) from tbl_employee
        </select>
    
    
    </mapper>

      8、测试代码

          public SqlSessionFactory getsqlSessionFactory() throws IOException {
              String resource = "mybatis-config.xml";
              InputStream inputStream = Resources.getResourceAsStream(resource);
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
              return sqlSessionFactory;
         }
       @Test
    public void testSelect() throws IOException { //1、获取 sqlSessionFactory SqlSessionFactory sqlSessionFactory = getsqlSessionFactory(); //2、获取 sqlSession 实例,能直接执行已经映射的 SQL 语句 SqlSession sqlSession = sqlSessionFactory.openSession(); try { EmployeeMapperBySelect mapper = sqlSession.getMapper(EmployeeMapperBySelect.class); //查询单条记录 Employee emp = mapper.getEmpById(1); System.out.println("emp = " + emp); //查询所有对象,返回 list 集合 //若查询出的数据有多条,则绝对不能将接口中该方法的返回值设置为Javabean List<Employee> emps = mapper.getAllEmps(); emps.forEach(System.out::println); //以 Map 集合获取一个员工信息,key就是列名,value就是查出来的值 Map<String, Object> empMapById = mapper.getEmpMapById(1); System.out.println(empMapById); //多条记录封装成一个 map Map<Integer, Employee> Map<Integer, Employee> empMap = mapper.getAllEmpMap(); System.out.println(empMap); //获取所有员工的数量 Integer count = mapper.getCount(); System.out.println(count); } finally { sqlSession.close(); } }

      9、效果

    二、select 标签的常用属性

      常用属性:

    select元素来定义查询操作
    id:唯一标识符,用来引用这条语句,需要和接口的方法名一致
    parameterType:参数类型,可以不传。 MyBatis会根据TypeHandler自动推断
    resultType: 返回值类型。别名或者全类名,如果返回的是集合,定义集合中元
    素的类型。不能和resultMap同时使用
    

      

      其他属性:

  • 相关阅读:
    BUUCTF-[GYCTF2020]Blacklist 1 思路
    [强网杯 2019]随便注 WriteUp(three way)思路
    [GXYCTF2019]Ping Ping Ping 1思路
    [ACTF2020 新生赛]Include 思路
    [极客大挑战 2019]Secret File 思路
    [SUCTF 2019]EasySQL 思路
    java环境变量配置 详细
    [极客大挑战 2019]Upload 思路
    [极客大挑战 2019]Http 思路
    [ACTF2020 新生赛]Exec 思路
  • 原文地址:https://www.cnblogs.com/niujifei/p/15233409.html
Copyright © 2020-2023  润新知