Mybatis中查询结果resultMap使用分析


本文章将讲述:

  • mybatis resultMap 标签的作用
  • resultMap 标签中 子标签 result 的使用分析
  • resultMap 标签中 主键标签 id 的使用分析
  • resultMap 中使用到的 jdbctype 与 java 数据类型映射关系

目前在西瓜视频上免费刊登 Flutter 系列教程,每日更新,欢迎关注接收提醒

【x1】点击查看提示

【x2】各种系列的教程

一个程序员的修炼日记


1 简述

resultMap标签是为了映射select查询出来结果的集合,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中。
那么resultMap标签的主要作用是将实体类中的字段与数据库表中的字段进行关联映射。

2 基本使用

例如 我们使用 mybatis 根据 id 来查询一个用户的基本信息,最简单的单表查询

用户实体


/**
 * 用户实体
 */
public class UserBean  implements Serializable {
  
  private int id;
  private String userName;
  private String realName;
  private int age;

   ... ...  get set 方法省略

  }

对应的 mapper.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.example.demo.dao.UserDao">

    <!--resultMap 映射-->
    <resultMap id="userBean" type="com.example.demo.bean.UserBean">
        <!--查询结果映射  -->
        <!--property 为实体中的属性名称-->
        <!--jdbcType 为属性对应的数据类型-->
        <!--column 为select查询语句中查询对应的列名-->
        <result property="id" jdbcType="INTEGER" column="id"/>
        <!--例如这里的 UserBean 实体中的属性为 userName,是字符串类型,在数据库中对应的列是user_name-->
        <result property="userName" jdbcType="VARCHAR" column="user_name"/>
        <result property="age" jdbcType="INTEGER" column="age"/>
        <result property="realName" jdbcType="VARCHAR" column="realname"/>
    </resultMap>

    <!--查询语句-->
    <select id="selectUserFormId" resultMap="userBean">
        select *
        from tb_user
        where id = #{id}
    </select>

</mapper>

在这里 我们通过 resultMap 标签中的 result 子标签映射基本数据类型,通过 property 属性与 column 属性将 实体类与查询结果集关联在了一起

3 resultMap 标签的使用分析

3.1 resultMap 标签中的属性配制分析

  • id 可自定义,用来做对 对映数据实体类的唯一映射标识,例如在下面的 select 查询语句中,resultMap 指定的值就是对应实体类 resultMap 中设置的 id值
  • type 是指定当明 resultMap 要映射的数据结果对应的javabean 实体类的路径

如下图所示:

在这里插入图片描述

3.2 子标签 result 使用分析

result 用来配制 非主键的映射 ,如上图中写的的用户的基本数据,例如 实体UserBean中的userName属性与sql查询结果中的user_name,可通过配制如下实现数据映射,
其中 jdbcType 用来配制基本数据类型

<!--例如这里的 UserBean 实体中的属性为 userName,是字符串类型,在数据库中对应的列是user_name-->
<result property="userName" jdbcType="VARCHAR" column="user_name"/>

上面描述的是 一一对映的映射,分别指定 JavaBean 实体中的属性名与 查询结果集中的列名来实现数据映射 ,如果实体类中的属性名称与 查询结果集中的列名一至,那在这里不写 result 映射,mybatis 将会实现自动映射

关于 jdbcType 数据类型的详细映射可参考这里
下面的表格(部分)内容就是摘自上面的文章中

类别JdbcTypeOracleMySqlJavaType
JdbcTypeARRAY
JdbcTypeBIGINTBIGINTlong
JdbcTypeBINARYbyte[]
JdbcTypeBITBITboolean
JdbcTypeBLOBBLOBBLOB
JdbcTypeBOOLEANboolean
JdbcTypeCHARCHARCHARString
JdbcTypeCLOBCLOB修改为TEXT
JdbcTypeCURSOR
JdbcTypeDATEDATEDATEjava.sql.Date
JdbcTypeDECIMALDECIMALDECIMALjava.math.BigDecimal
JdbcTypeDOUBLENUMBERDOUBLEdouble
JdbcTypeFLOATFLOATFLOATfloat
JdbcTypeINTEGERINTEGERINTEGERint
JdbcTypeLONGVARBINARYbyte[]
JdbcTypeLONGVARCHARLONGVARCHAR
JdbcTypeNCHARNCHAR
JdbcTypeNCLOBNCLOB
JdbcTypeNULL
JdbcTypeNUMERICNUMERIC/NUMBERNUMERICjava.math.BigDecimal
JdbcTypeNVARCHAR
JdbcTypeOTHER
JdbcTypeREAL REALREALfloat
JdbcTypeSMALLINTSMALLINTSMALLINTshort
JdbcTypeSTRUCT
JdbcTypeTIMETIMEjava.sql.Time
JdbcTypeTIMESTAMPTIMESTAMPTIMESTAMP/DATETIME
JdbcTypeTINYINTTINYINTbyte
JdbcTypeUNDEFINED
JdbcTypeVARBINARYString
JdbcTypeVARCHARVARCHARVARCHARString

也就是说在使用时最容易出错的是使用到的 Time 与 Date 的映射

3.3 子标签 id 使用分析

resultMap 标签中的子标签 id 用来标识出对象的唯一性,比如用户表的主键
在这里插入图片描述

它的用法与 result 标签的使用基本上一至,不同的是,id 标签必须写在result 标签上面,或者说是 resultMap 标签中的第一行。


目前在西瓜视频上免费刊登 Flutter 系列教程,每日更新,欢迎关注接收提醒

【x1】点击查看提示

【x2】各种系列的教程

一个程序员的修炼日记

早起的年轻人 CSDN认证博客专家 移动开发 项目管理 Java
只要用心去做,每一件事情还是有可能成功的,当然成功是没有界限的,只不过是达到自己心里的那个目标,公众号:我的大前端生涯,一个爱喝茶的程序员,通常会搞搞SpringBoot 、Herbinate、Mybatiys、Android、iOS、Flutter、Vue、小程序等.
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页