Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在mybatis中使用一对一映射和spring boot?_Java_Spring_Spring Mvc_Spring Boot_Mybatis - Fatal编程技术网

Java 如何在mybatis中使用一对一映射和spring boot?

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

在我的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; } }
使用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