在我的 Spring Boot 项目中,我使用 MyBatis。我想知道如何使用一对一映射以及如何为映射类创建 POJO。这是我使用过的 SQL 转储:
CREATE TABLE IF NOT EXISTS LANG(
ID BIGINT(10) NOT NULL AUTO_INCREMENT,
CODE VARCHAR(3) UNIQUE,
NAME VARCHAR(150),
PRIMARY KEY (ID)
);
CREATE TABLE IF NOT EXISTS PROVINCE(
ID BIGINT(10) NOT NULL AUTO_INCREMENT,
CODE VARCHAR(10) UNIQUE,
NAME VARCHAR(200),
LANG_CODE VARCHAR(3),
PRIMARY KEY (ID),
FOREIGN KEY(LANG_CODE) REFERENCES LANG(CODE)
);
POJO 是,
Language.java
public class Language {
private long id;
private String code;
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Province
public class Province {
private long id;
private String code;
private String name;
private String lang_code;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLang_code() {
return lang_code;
}
public void setLang_code(String lang_code) {
this.lang_code = lang_code;
}
}
最佳答案
您应该更改您的实体省份,包括语言属性,而不是重复它,如下所示:
public class Province {
private long id;
private Language language;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public Language getLanguage() {
return language;
}
public void setLanguage(Language language) {
this.language = language;
}
}
另一方面,您需要创建具有通过代码搜索的语言选择操作的映射器以及您应该绑定(bind)的省份的选择。您可以使用注释查看下一个示例:
public interface MapperProvince {
@Select("select * from PROVINCE")
@Results({
@Result(id=true, property = "id", column = "ID"),
@Result(property="language", column="LANG_CODE",
one=@One(select="com.example.MapperProvince.findByCode"))
})
public List<Province> findAll();
@Select("select * from PROVINCE where ID = {id}")
@Results({
@Result(id=true, property = "id", column = "ID"),
@Result(property="language", column="LANG_CODE",
one=@One(select="com.example.MapperProvince.findByCode"))
})
public Province findById(long id);
@Select("select * from LANGUAGE where CODE = {code}")
@Results({
@Result(id=true, property = "id", column = "id"),
@Result(property = "code", column = "code"),
@Result(property = "name", column = "name")
})
public Language findByCode(String code);
}
如您所见,有一个语言操作通过代码进行搜索,该操作在表省中链接。另一方面,当您搜索 Province 时,您的语言属性结果应调用链接两者的 Language findByCode 操作。我举了一个搜索所有省份或仅按 ID 的示例。
关于java - 如何在 mybatis 和 spring boot 中使用一对一映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37856666/