Java 如何在mybatis中使用一对一映射和spring boot?
在我的SpringBoot项目中,我使用的是MyBatis。我想知道如何使用一对一映射以及如何为映射类创建POJO。这是我使用的SQL转储: 如果不存在,则创建表 ID BIGINT10非空自动增量, 代码VARCHAR3 UNIQUE, 名字是VARCHAR150, 主键ID ; 创建表(如果不存在) ID BIGINT10非空自动增量, 代码VARCHAR10唯一, 名字是VARCHAR200, 语言代码VARCHAR3, 主键ID, 外键语言代码引用语言代码 ; 而波乔是 Language.java 公共类语言{ 私人长id; 私有字符串码; 私有字符串名称; 公共长getId{ 返回id; } 公共无效setIdlong id{ this.id=id; } 公共字符串getCode{ 返回码; } 公共无效setCodeString代码{ this.code=代码; } 公共字符串getName{ 返回名称; } public void setNameString名称{ this.name=名称; } } 省 公营省{ 私人长id; 私有字符串码; 私有字符串名称; 私有字符串语言代码; 公共长getId{ 返回id; } 公共无效setIdlong id{ this.id=id; } 公共字符串getCode{ 返回码; } 公共无效setCodeString代码{ this.code=代码; } 公共字符串getName{ 返回名称; } public void setNameString名称{ this.name=名称; } 公共字符串getLang_代码{ 返回lang_代码; } 公共无效设置语言代码字符串语言代码{ this.lang\u code=lang\u code; } }Java 如何在mybatis中使用一对一映射和spring boot?,java,spring,spring-mvc,spring-boot,mybatis,Java,Spring,Spring Mvc,Spring Boot,Mybatis,在我的SpringBoot项目中,我使用的是MyBatis。我想知道如何使用一对一映射以及如何为映射类创建POJO。这是我使用的SQL转储: 如果不存在,则创建表 ID BIGINT10非空自动增量, 代码VARCHAR3 UNIQUE, 名字是VARCHAR150, 主键ID ; 创建表(如果不存在) ID BIGINT10非空自动增量, 代码VARCHAR10唯一, 名字是VARCHAR200, 语言代码VARCHAR3, 主键ID, 外键语言代码引用语言代码 ; 而波乔是 Language
使用mybatis spring启动程序进行设置 languageApper.java
@Mapper
public class LanguageMapper{
List<Language> queryLang();
}
languageApper.xml
<select id="queryLang" resultType="Language">
select id,
code,
name
from LANG
</select>
使用mybatis spring启动程序进行设置 languageApper.java
@Mapper
public class LanguageMapper{
List<Language> queryLang();
}
languageApper.xml
<select id="queryLang" resultType="Language">
select id,
code,
name
from LANG
</select>
您应该更改实体省,包括语言属性,而不是重复该属性,如下所示:
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;
}
}
另一方面,您需要使用语言选择操作创建映射器,按代码搜索并选择您应该绑定的省份。您可以使用注释查看下一个示例:
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);
}
正如您所看到的,有一个语言操作,它通过代码进行搜索,并在表中链接。另一方面,当您搜索省份时,language属性的结果应该调用链接两者的language findByCode操作。我举了一个搜索所有省份或仅按ID搜索的示例。您应该更改包含语言属性的实体省份,而不是重复它,如下所示:
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;
}
}
另一方面,您需要使用语言选择操作创建映射器,按代码搜索并选择您应该绑定的省份。您可以使用注释查看下一个示例:
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);
}
正如您所看到的,有一个语言操作,它通过代码进行搜索,并在表中链接。另一方面,当您搜索省份时,language属性的结果应该调用链接两者的language findByCode操作。我举了一个例子,搜索所有省份或仅通过ID