← 返回首页
MybatisPlus基础教程(十一)
发表时间:2020-11-02 23:04:01
OneToOne(一对一)

一对一的情形在生活中非常罕见,比如一个居民对应一个身份证号码,一个人对应一个DNA序列等等。 我们以一个居民对应一张身份证为例,讲解MybatisPlus如何实现一对一的映射关系。

1)创建实体类: IdCard.java(身份证类)

package com.oracle.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;

//身份证类,将来不会映射为一张身份证表。
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class IdCard extends BaseEntity implements Serializable,Cloneable {
    @Id
    @Column(length = 18) //中国的身份证号码是18位的。
    private String pid; //身份证号码
    private String province;//省份
}

Person.java(居民类)

package com.oracle.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class Person extends BaseEntity implements Serializable,Cloneable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @TableId(type = IdType.AUTO)
    private int id; //注意,这是公民表的主键,不是身份证号码
    private String name; //姓名
    private String gender; //性别
    @Column(unique = true) //唯一索引,保证身份证是唯一
    private String pid;  //身份证号码*/
}

测试一对一的映射关系。由于篇幅限制Person和IdCard的Mapper和Service层代码省略,大家可以自行参考前面案例实现。

@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonSeviceTest {
    @Resource
    private PersonService personService;
    @Resource
    private IdCardService idCardService;

    @Test
    public void savePersonWithMybatis(){
          IdCard card = new IdCard("610103199910103657","陕西省");
          //先保存身份证
          idCardService.insertWithMybatis(card);
          Person p = new Person(-1,"令狐冲","男", card.getPid());
          //再保存居民
          personService.insertWithMybatis(p);
    }
}