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同时使用
其他属性: