MyBatis的一对一映射(八)上

简介: MyBatis的一对一映射(八)

一. MyBatis的一对一映射


在业务开发中,常常会遇到关联联系的,如表与表之间的一对一关系。如,员工与员工的身份证号, 这就是典型的一对一。 可以与Hibernate的一对一 区别理解。


Hibernate的一对一映射地址为: https://blog.csdn.net/yjltx1234csdn/article/details/83241189


员工表 User:

20190704195736766.png

身份证表 IdCard:


20190705142956854.png


其中,IdCard 表中的 uid 并不是外键,只是User 表中id 相对应的那个字段, 值完全一样,但并不用外键,避免删除和修改时与User 表有太大的影响。


其所对应的实体类为:


User.java


package com.yjl.pojo;
/**
 @author:yuejl
 @date: 2019年6月15日 上午11:11:02
 @Description Mybatis 使用的基本类 User
*/
public class User {
  /**
   * @param id id编号,自增
   * @param name 姓名
   * @param age 年龄
   * @param sex 性别
   * @param description 描述
   */
  private Integer id;
  private String name;
  private Integer age;
  private String sex;
  private String description;
  //引入id card 的关联类型.
  private IdCard idCard;
  public Integer getId() {
    return id;
  }
  public void setId(Integer id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public Integer getAge() {
    return age;
  }
  public void setAge(Integer age) {
    this.age = age;
  }
  public String getSex() {
    return sex;
  }
  public void setSex(String sex) {
    this.sex = sex;
  }
  public String getDescription() {
    return description;
  }
  public void setDescription(String description) {
    this.description = description;
  }
  public IdCard getIdCard() {
    return idCard;
  }
  public void setIdCard(IdCard idCard) {
    this.idCard = idCard;
  }
  @Override
  public String toString() {
    return "User [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + ", description=" + description
        + ", idCard=" + idCard + "]";
  }
}


IdCard.java 类:


package com.yjl.pojo;
/**
 @author: yuejl
 @date: 2019年7月5日 下午12:41:47
 @Description 类的相关描述
*/
public class IdCard {
  /**
   * @param uid 身份证唯一标识符
   * @param idNum 身份证标识符
   */
  private Integer id;
  private String idNum;
  //引入员工的属性
  private User userId;
  public Integer getId() {
    return id;
  }
  public void setId(Integer id) {
    this.id = id;
  }
  public String getIdNum() {
    return idNum;
  }
  public void setIdNum(String idNum) {
    this.idNum = idNum;
  }
  public User getUserId() {
    return userId;
  }
  public void setUserId(User userId) {
    this.userId = userId;
  }
  @Override
  public String toString() {
    return "IdCard [id=" + id + ", idNum=" + idNum + ", userId=" + userId + "]";
  }
}


二. ResultMap 元素


resultMap 中所具有的元素有:


  <resultMap>
    <!--构造函数-->
    <constructor>
      <!--主键的-->
      <idArg />
      <!--普通属性-->
      <arg/>
    </constructor>
    <!--属性主键-->
    <id />
    <!--普通属性 result-->
    <result />
    <!--一对一关联查询-->
    <association />
    <!---一对多关联查询-->
    <collection />
    <!--鉴别器-->
    <discriminator javaType="">
      <case value=""></case>
    </discriminator>
  </resultMap>


id,result 前面已经讲解过了, 下面讲解一下 constructor 和 association, collection和discriminator 后面章节会讲。


constructor 为构造参数, 在User 表中添加 构造方法, 参数为 id,普通属性有 name 和sex。 手动添加空构造方法。


  public User(){
  }
  public User(Integer id,String name,String sex){
    this.id=id;
    this.name=name;
    this.sex=sex;
  }


接口为:


public User getById(int id);


则以前的id,result 为:


<resultMap type="user" id="userResultMap">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="sex" column="sex"/>
    <result property="age" column="age"/>
    <result property="description" column="description"/>
</resultMap>
<!-- 嵌套结果 -->
  <select id="getById" parameterType="int" resultMap="userResultMap">
    select * from user where id=#{id}
</select>


则可以改成:


<resultMap type="user" id="userResultMap">
    <constructor>
      <!--顺序与构造方法的参数顺序必须一样。 javaType 必须填写。-->
      <idArg javaType="int" column="id" />
      <arg javaType="string" column="name"/>
      <arg javaType="string" column="sex"/>
    </constructor>
</resultMap>


其中, javaType 如果是Integer, 则可以写成’int’, 如果类型是 int,则可以写成’_int’ ,字符串 为’string’.

注意,不要用name 节点. 3.4.3版本之后,才添加了注解。

相关文章
|
6月前
|
XML Oracle Java
mybatis反向生成实体类、dao层以及映射文件
mybatis反向生成实体类、dao层以及映射文件
|
6月前
|
SQL Java 数据库连接
|
6月前
|
Java 数据库连接 Maven
使用mybatis插件generator生成实体类,dao层和mapper映射
使用mybatis插件generator生成实体类,dao层和mapper映射
370 0
|
6月前
|
SQL Java 数据库连接
MyBatis映射文件深入
MyBatis映射文件深入
87 0
|
10天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
2月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
4月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
89 3
|
6月前
|
XML Java 数据库连接
【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......
【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......
137 0
|
5月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
71 3
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改