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同时使用

  

  其他属性:

原文地址:https://www.cnblogs.com/niujifei/p/15233409.html