如何使用 Mybatis 将 JavaBean 包含列表保存到 Sql?

How to save a JavaBean contains list to Sql By using Mybatis?

众所周知,在使用Hibernate时,它可以为我们创建sql table。即使一个Java Bean都有一个列表,hibernate会为我们创建一个外来的table。

但是我在使用myBatis的时候,觉得很不方便,需要自己提前创建table。然后我可以将值插入 table。比较不方便和我不确定的是,当我有一个带有列表的 JavaBean 时,我想将此文档保存到 mysql.

例如,我的 java bean:

public class Person {
    public String id;
    public List<String> interests;
}

那么,Mysql应该有一个主要table(人table)和一个外国table(兴趣table)。

我的问题是:1.mybatis可以帮我创建这两个table吗? 2. mybatis 能否自动为我转换javabean 并向两个table 插入值。例如(当然这是不正确的)

<insert id="insertPerson">
    INSERT INTO Person.java TO Database
</insert>
  1. 不,你不想要它。不要像 Spring Data 或 Hibernate 一样使用 MyBatis。
  2. 关于自动转换。您应该为所有相关类型(在我们的情况下为 PersonInterest)提供映射。处理 Service 层上的正确插入。 MyBatis 可以通过 @Many(select = "selectPersonInterests")

    提供选择
    @Mapper
    public interface PersonMapper {
    
        @InsertProvider(type = PersonProvider.class, method = "insertPerson")
        void insertPerson(@Param("person") Person person);
    
        @InsertProvider(type = PersonProvider.class, method = "insertPersonInterest")
        void insertInterestItem(@Param("interest") Interest item);
    }
    
    @Component
    public class PersonProvider {
        public String insertPersonInterest() {
            return  "insert into person_interest (...) " +
                    "values (#{...}, ...);";
        }
        public String insertPerson() {
            return  "insert into person (...) " +
                    "values (#{...}, ...);";
        }
    }