一对一的情形在生活中非常罕见,比如一个居民对应一个身份证号码,一个人对应一个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);
}
}
