详解Mybatis查询之resultType返回值类型问题【4种情况】

简介: 详解Mybatis查询之resultType返回值类型问题【4种情况】

编译软件:IntelliJ IDEA 2019.2.4 x64

操作系统:win10 x64 位 家庭版

Maven版本:apache-maven-3.6.3

Mybatis版本:3.5.6

引言

在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

🥇如何给类自定义别名?

  1. 在Mybatis-config.xml文件中给类起别名
    ①直接给类起别名
    代码示例如下:
<typeAliases>
  <!-- 给mybatis.pojo包下的Employee类起了别名【employee】  -->
    <typeAlias type="mybatis.pojo.Employee" alias="employee"/>
</typeAliases>
  1. ②给包下的类批量起别名
    代码示例如下:
<typeAliases>
    <typeAlias type="mybatis.pojo" />
</typeAliases>
  1. ps: 只要写包名即可,mybatis会自动去扫描包下的所有类,并以类名的首字母小写给类起别名
  2. 在类上使用注解@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();
    }
}

相关文章
|
1月前
|
Java 数据库连接 mybatis
Mybatis查询传递单个参数和传递多个参数用法
Mybatis查询传递单个参数和传递多个参数用法
39 11
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
|
1月前
|
Java 数据库连接 mybatis
SpringBoot配置Mybatis注意事项,mappers层下的name命名空间,要落实到Dao的video类,resultType要落到bean,配置好mybatis的对应依赖。
SpringBoot配置Mybatis注意事项,mappers层下的name命名空间,要落实到Dao的video类,resultType要落到bean,配置好mybatis的对应依赖。
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
MybatisPlus介绍新增用户,根据id查询,引入MybatisPlus的起步依赖,增删改查最简单的写法
MybatisPlus介绍新增用户,根据id查询,引入MybatisPlus的起步依赖,增删改查最简单的写法
|
2月前
|
Java 数据库连接 mybatis
Mybatis基于注解的一对一和一对多查询
Mybatis基于注解的一对一和一对多查询
31 0
|
3月前
|
算法 BI 数据库
MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作
MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作
101 3
|
3月前
|
SQL Java 数据库连接
MyBatis 查询数据库
MyBatis 查询数据库
|
4天前
|
Java 关系型数据库 MySQL
1、Mybatis-Plus 创建SpringBoot项目
这篇文章是关于如何创建一个SpringBoot项目,包括在`pom.xml`文件中引入依赖、在`application.yml`文件中配置数据库连接,以及加入日志功能的详细步骤和示例代码。
|
5天前
|
数据库
elementUi使用dialog的进行信息的添加、删除表格数据时进行信息提示。删除或者添加成功的信息提示(SpringBoot+Vue+MybatisPlus)
这篇文章介绍了如何在基于SpringBoot+Vue+MybatisPlus的项目中使用elementUI的dialog组件进行用户信息的添加和删除操作,包括弹窗表单的设置、信息提交、数据库操作以及删除前的信息提示和确认。
elementUi使用dialog的进行信息的添加、删除表格数据时进行信息提示。删除或者添加成功的信息提示(SpringBoot+Vue+MybatisPlus)