本文章将讲述:
- mybatis resultMap 标签的作用
- resultMap 标签中 子标签 result 的使用分析
- resultMap 标签中 主键标签 id 的使用分析
- resultMap 中使用到的 jdbctype 与 java 数据类型映射关系
目前在西瓜视频上免费刊登 Flutter 系列教程,每日更新,欢迎关注接收提醒
【x1】点击查看提示
【x2】各种系列的教程
一个程序员的修炼日记
resultMap标签是为了映射select查询出来结果的集合,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中。
那么resultMap标签的主要作用是将实体类中的字段与数据库表中的字段进行关联映射。
例如 我们使用 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_userwhere id = #{id}</select></mapper>
在这里 我们通过 resultMap 标签中的 result 子标签映射基本数据类型,通过 property 属性与 column 属性将 实体类与查询结果集关联在了一起
如下图所示:
result 用来配制 非主键的映射 ,如上图中写的的用户的基本数据,例如 实体UserBean中的userName属性与sql查询结果中的user_name,可通过配制如下实现数据映射,
其中 jdbcType 用来配制基本数据类型
<!--例如这里的 UserBean 实体中的属性为 userName,是字符串类型,在数据库中对应的列是user_name-->
<result property="userName" jdbcType="VARCHAR" column="user_name"/>
上面描述的是 一一对映的映射,分别指定 JavaBean 实体中的属性名与 查询结果集中的列名来实现数据映射 ,如果实体类中的属性名称与 查询结果集中的列名一至,那在这里不写 result 映射,mybatis 将会实现自动映射
关于 jdbcType 数据类型的详细映射可参考这里
下面的表格(部分)内容就是摘自上面的文章中
类别 | JdbcType | Oracle | MySql | JavaType |
---|---|---|---|---|
JdbcType | ARRAY | |||
JdbcType | BIGINT | BIGINT | long | |
JdbcType | BINARY | byte[] | ||
JdbcType | BIT | BIT | boolean | |
JdbcType | BLOB | BLOB | BLOB | |
JdbcType | BOOLEAN | boolean | ||
JdbcType | CHAR | CHAR | CHAR | String |
JdbcType | CLOB | CLOB | 修改为TEXT | |
JdbcType | CURSOR | |||
JdbcType | DATE | DATE | DATE | java.sql.Date |
JdbcType | DECIMAL | DECIMAL | DECIMAL | java.math.BigDecimal |
JdbcType | DOUBLE | NUMBER | DOUBLE | double |
JdbcType | FLOAT | FLOAT | FLOAT | float |
JdbcType | INTEGER | INTEGER | INTEGER | int |
JdbcType | LONGVARBINARY | byte[] | ||
JdbcType | LONGVARCHAR | LONG | VARCHAR | |
JdbcType | NCHAR | NCHAR | ||
JdbcType | NCLOB | NCLOB | ||
JdbcType | NULL | |||
JdbcType | NUMERIC | NUMERIC/NUMBER | NUMERIC | java.math.BigDecimal |
JdbcType | NVARCHAR | |||
JdbcType | OTHER | |||
JdbcType | REA | L REAL | REAL | float |
JdbcType | SMALLINT | SMALLINT | SMALLINT | short |
JdbcType | STRUCT | |||
JdbcType | TIME | TIME | java.sql.Time | |
JdbcType | TIMESTAMP | TIMESTAMP | TIMESTAMP/DATETIME | |
JdbcType | TINYINT | TINYINT | byte | |
JdbcType | UNDEFINED | |||
JdbcType | VARBINARY | String | ||
JdbcType | VARCHAR | VARCHAR | VARCHAR | String |
也就是说在使用时最容易出错的是使用到的 Time 与 Date 的映射
resultMap 标签中的子标签 id 用来标识出对象的唯一性,比如用户表的主键
它的用法与 result 标签的使用基本上一至,不同的是,id 标签必须写在result 标签上面,或者说是 resultMap 标签中的第一行。
目前在西瓜视频上免费刊登 Flutter 系列教程,每日更新,欢迎关注接收提醒
【x1】点击查看提示
【x2】各种系列的教程
一个程序员的修炼日记
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态