MyBatis查询结果resultType返回值类型的说明

一、返回一般数据类型

比如要根据 id 属性获得数据库中的某个字段值。

mapper 接口:

// 根据 id 获得数据库中的 username 字段的值

String getEmpNameById(Integer id);

SQL 映射文件:

 <!--
  指定 resultType 返回值类型时 String 类型的,
  string 在这里是一个别名,代表的是 java.lang.String 

  对于引用数据类型,都是将大写字母转小写,比如 HashMap 对应的别名是 'hashmap'
  基本数据类型考虑到重复的问题,会在其前面加上 '_',比如 byte 对应的别名是 '_byte'
 -->
 <select id="getEmpNameById" resultType="string">
  select username from t_employee where id = #{id}
 </select>

二、返回 JavaBean 类型

比如根据某个字段获得数据库中的信息,把查询的结果信息封装成某个 JavaBean 类型的数据。

mapper 接口:

// 根据 id 查询信息,并把信息封装成 Employee 对象

Employee getEmpById(Integer id);

SQL 映射文件:

 <!--
  通过 resultType 指定查询的结果是 Employee 类型的数据
  只需要指定 resultType 的类型,MyBatis 会自动将查询的结果映射成 JavaBean 中的属性
 -->
 <select id="getEmpById" resultType="employee">
  select * from t_employee where id = #{id}
 </select>

三、返回List类型

有时候我们要查询的数据不止一条,比如:模糊查询,全表查询等,这时候返回的数据可能不止是一条数据,对于多数据的处理可以存放在List集合中。

mapper 接口:

// 假如是全表查询数据,将查询的数据封装成 Employee 类型的集合

List<Employee> getAllEmps();

SQL 映射文件:

 <!--
  注意这里的 resultType 返回值类型是集合内存储数据的类型,不是 'list'
 -->
 <select id="getAllEmps" resultType="employee">
  select * from t_employee
 </select>

四、返回Map类型

MyBatis 还支持将查询的数据封装成Map。

1. 如果查询的结果是一条,我们可以把查询的数据以{表字段名, 对应的值}方式存入到Map中。

mapper 接口:

// 根据 id 查询信息,并把结果信息封装成 Map

Map<String, Object> getEmpAsMapById(Integer id);

SQL 映射文件:

 <!--
  注意这里的 resultType 返回值类型是 'map'
  -->
 <select id="getEmpAsMapById" resultType="map">
  select * from t_employee where id = #{id}
 </select>

下面把查询的结果数据贴出来供大家参考:

2. 如果查询的结果是多条数据,我们也可以把查询的数据以{表中某一字段名, JavaBean}方式来封装成Map。

mapper 接口:

 // 查询所有员工的信息,把数据库中的 'id' 字段作为 key,对应的 value 封装成 Employee 对象
 // @MapKey 中的值表示用数据库中的哪个字段名作 key
 @MapKey("id")
 Map<Integer, Employee> getAllEmpsAsMap();

SQL 映射文件:

 <!--
  注意 resultType 返回值类型,不再是 'map',而是 Map 的 value 对应的 JavaBean 类型
 -->
 <select id="getAllEmpsAsMap" resultType="employee">
  select * from t_employee
 </select>

下面是查询的结果 (只截取了一部分):

MyBatis 允许查询的结果封装成Map,这种机制是极好的。

五、扩展

扩展. 上面返回结果的形式都是基于查询 (select) 的,其实对于增删改的操作也可以返回一定类型的数据,比如Boolean,Integer等。

总结.

本文主要介绍了在开发中常用的几种数据返回值类型,希望能够为你提供帮助。

补充知识:mybatis select返回多条记录即返回类型为list时,resultType的写法

如下所示:

查询出的结果可能有好多条记录,返回类型即是list。但resultType还是写成resultType="user"(user为集合list中的实体类),而不是写成resultType="java.util.List"

以上这篇MyBatis查询结果resultType返回值类型的说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2020-11-20

MyBatis中传入参数parameterType类型详解

前言 Mybatis的Mapper文件中的select.insert.update.delete元素中有一个parameterType属性,用于对应的mapper接口方法接受的参数类型.本文主要给大家介绍了关于MyBatis传入参数parameterType类型的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1. MyBatis的传入参数parameterType类型分两种 1. 1. 基本数据类型:int,string,long,Date; 1. 2. 复杂数据类

Mybatis实体类属性与数据库不一致解决方案

当实体类属性和数据库不一致时,使用mybatis查询数据库返回实体类自动封装就会出现问题.针对这种情况,有两种解决方案. 1.使用别名查询 <!-- 配置查询所有操作 --> <select id="findAll" resultType="com.itheima.domain.User"> select id as userId,username as userName,birthday as userBirthday, sex as us

MyBatis带参查询的方法详解

#{}占位符 类似于jdbc中通过PreparedStatement进行操作的方式, 会将sql语句中需要参数的位置使用?进行占位,后续由传进来的参数进行参数的绑定.?处绑定的都是值,不能指定表的列,转换成sql时表名会被当成字符串,会出错,防止sql注入. select username,age,password from 'tb_user' 简单类型参数 简单类型指的是: 基本数据类型, 包装类型, String, java.sql.*.当参数是简单类型时, MyBatis会忽略SQL语句中

mybatis 实现 SQL 查询拦截修改详解

前言 截器的一个作用就是我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法. Mybatis拦截器设计的一个初衷就是为了供用户在某些时候可以实现自己的逻辑而不必去动Mybatis固有的逻辑.比如我想针对所有的SQL执行某个固定的操作,针对SQL查询执行安全检查,或者记录相关SQL查询日志等等. Mybatis为我们提供了一个Interceptor接口,可以实现自定义的拦截器. public inter

Mongoose实现虚拟字段查询的方法详解

前言 不知道大家知不知道,mongoose为数据模型提供了虚拟属性, 借此可以更加一致地.方便地读写模型属性,类似于C#或Java中的访问器. 我们知道虚拟属性在Query阶段一定是查不到的,因为事实上MongoDB并没有存储这些属性. 但是否可以通过一个拦截器来实现虚拟属性的查询呢? 这个问题很有趣,而且在很多场景下都相当方便.例如: 实现一个暴力的全文检索时,需要对多个字段匹配统一查询词,该查询词可抽象为虚拟属性: 多处都需要进行同一个复杂条件的查询时,可以用虚拟属性封装该查询条件. 事实上

SpringData关键字查询实现方法详解

一.创建项目并导入Jap相关依赖 1.1 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifac

在php7中MongoDB实现模糊查询的方法详解

前言 在实际开发中, 有不少的场景需要使用到模糊查询, MongoDB shell 模糊查询很简单: db.collection.find({'_id': /^5101/}) 上面这句就是查询_id以'5101'开始的内容. 在老的MogoDB中模糊查询挺简单的,这里简单记录下模糊查询的操作方式: 命令行下: db.letv_logs.find({"ctime":/uname?/i}); php操作 $query=array("name"=>new Mongo

MySql实现跨表查询的方法详解

复制代码 代码如下: SELECT c.id, c.order_id, c.title, c.content, c.create_time, o.last_pic FROM `orders` o , `case` c WHERE c.order_id = o.order_id ORDER BY c.id DESC LIMIT 15; 关于跨表提取字段的方法!利用order_id相同字段,提取case中的id,order_id,title,content,create_time:orders表中的

MyBatis Mapper代理使用方法详解

MyBatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 下文重点给大家介绍mapper代理使用方法. 一.开发人员需要完成的任务: mapper.xml映射文件和mapper.java 二.开发规范

MyBatis查询缓存实例详解

查询缓存的使用,主要是为了提高查询访问速度.将用户对同一数据的重复查询过程简化,不再每次均从数据库查询获取结果数据,从而提高访问速度. MyBatis的查询缓存机制,根据缓存区的作用域(生命周期)可划分为两种:一级缓存与二级缓存 一.一级查询缓存 MyBatis一级缓存是基于org.apache.ibatis.cache.impl.PerpetualCache类的HashMap本地缓存,其作用域是Sqlsession.在同一个Sqlsession中两次执行相同的sql语句,第一次执行完毕后,会将

java执行SQL语句实现查询的通用方法详解

完成SQL查询 并将查询结果放入Vector容器,以便其他程序使用 /* * 执行sql查询语句 */ public static <T> Vector<T> executeQuery(Class<T> clazz, String sql, Object... args) { Connection conn = null; PreparedStatement preparedstatement = null; ResultSet rs = null; Vector<

Mybatis中的resultType和resultMap查询操作实例详解

resultType和resultMap只能有一个成立,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的映射问题.比如:列名和对象属性名不一致时可以使用resultMap来配置:还有查询的对象中包含其他的对象等. MyBatisConfig.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configura

对laravel in 查询的使用方法详解

今天遇到多条件搜索,其中需要用到in查询,但是laravel不支持 [ 'type', 'in', '1,2,3'] 这样的写法 经过一波百度,也没发现什么好的方法. 其中一种方法是: $where = function ($query) {$query->whereIn('id', [1,2])->orWhere('d_id', '=', '83');} 这样确实可以解决,是一种解决方法.但我总觉得还有更好的方法,找到了 DB::Raw(); 开始我是这样用的 但是这样总会在sql后面出现i