编译软件:IntelliJ IDEA 2019.2.4 x64
操作系统:win10 x64 位 家庭版
Maven版本:apache-maven-3.6.3
Mybatis版本:3.5.6
文章目录
- 引言
- 一、查询单行数据返回单个对象
- 二、查询多行数据返回对象的集合
- 三、 查询单行数据返回Map[Key,Value]集合
- 四、 查询多行数据返回Map集合
引言
在Mybatis中,resultType属性是selcet元素【映射查询语句】中常用的属性之一,这个属性是什么意思呢?Mybatis官方对它的描述如下所示:期望从这条语句中返回结果的类全限定名或别名。 注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能同时使用一个。
一、查询单行数据返回单个对象
👉应用场景
例如根据id或者字段条件查询获取表中的某一个字段值
代码示例如下
①Java代码示例如下
//根据empId来查出对应的employee对象
public Employee selectByempId(int empId);
②sql映射文件中相关代码如下
<!-- resultType:Mapper接口中selectByempId方法的返回值类型【Employee类(写类的全名称)】 -->
<select id="selectByempId" resultType="mybatis.pojo.Employee">
select
id,
last_name ,
email,
salary
from
tbl_employee
where
id= #{empId}
</select>
❗注意:
①resultType中的类名一般是写类的全类名,但如果之前自定义了类的别名,也可以写上别名去
②如果是java 的基本类型,就不需要别名的
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_boolean | boolean |
integer | Integer |
string | String |
date | Date |
boolean | Boolean |
🥇如何给类自定义别名?
-
在Mybatis-config.xml文件中给类起别名
①直接给类起别名
代码示例如下:
<typeAliases> <!-- 给mybatis.pojo包下的Employee类起了别名【employee】 --> <typeAlias type="mybatis.pojo.Employee" alias="employee"/> </typeAliases>
②给包下的类批量起别名
代码示例如下:
<typeAliases> <typeAlias type="mybatis.pojo" /> </typeAliases>
ps: 只要写包名即可,mybatis会自动去扫描包下的所有类,并以类名的首字母小写给类起别名
-
在类上使用注解@Alias给类起别名
代码示例如下:
package mybatis.pojo; @Alias("emp") //使用@Alias注解给Employee类起了别名emp public class Employee { }
二、查询多行数据返回对象的集合
代码示例如下:
①Java代码示例如下
//查看所有的员工信息
public List<Employee> showAllEmployee();
②sql映射文件中相关代码如下
<!-- 查看所有的员工信息 -->
<!-- 如果resultType中的值是一个类的类型,如果之前定义它的别名,这里可填写该类的别名,毕竟有时类的全名太长了 -->
<select id="showAllEmployee" resultType="mybatis.pojo.Employee">
select
id,
last_name ,
email,
salary
from
tbl_employee
</select>
❗ 注意:如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。
三、 查询单行数据返回Map[Key,Value]集合
👉应用场景
数据库中的字段作为Map的key,查询结果作为Map的Value
⭐用法案例
根据员工编号查询指定的员工信息,并用Map集合返回结果
①在Mapper接口书写相应的方法
//根据员工编号查询指定的员工信息,并用Map集合返回结果
public Map<String,Object> showEmpoloyByempID(int empId);
②在映射文件中书写相应的sql
<select id="showEmpoloyByempID" resultType="map">
select
id,
last_name ,
email,
salary
from
tbl_employee
where
id= #{empId}
</select>
③测试
@Test
public void test06(){
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过SqlSessionFactory对象调用openSession();
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取EmployeeMapper的代理对象
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
Map<String, Object> map = employeeMapper.showEmpoloyByempID(1);
System.out.println(map);
} catch (IOException e) {
e.printStackTrace();
}
}
四、 查询多行数据返回Map集合
👉应用场景
Map<Integer key,Employee value>
对象的id作为key
对象作为value
⭐用法案例
查询所有的员工信息,使用Map集合返回查询结果
①在Mapper接口中书写相应方法
//查询所有的员工信息
@MapKey("id")
public Map<Integer,Employee> showAll();
②在对应的映射文件中书写相关的sql
<select id="showAll" resultType="map">
select
id,
last_name ,
email,
salary
from
tbl_employee
</select>
③测试
@Test
public void test07(){
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过SqlSessionFactory对象调用openSession();
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取EmployeeMapper的代理对象
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
Map<Integer, Employee> map = employeeMapper.showAll();
System.out.println(map);
} catch (IOException e) {
e.printStackTrace();
}
}