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

时间:2017-04-26 09:16:38

标签: java mysql mybatis spring-mybatis

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

然而,当我使用myBatis时,我发现我必须自己创建表格非常不方便。然后我可以在表中插入值。什么更不方便,我不确定当我有一个带有列表的JavaBean时,我想将此文档保存到mysql。

例如,我的java bean:

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

然后,Mysql应该有一个主表(人员表)和一个外表(兴趣表)。

我的问题是:1。mybatis可以为我创建这两张桌子吗? 2. mybatis可以为我自动转换javabean并将值插入两个表。例如(当然这不正确)

<insert id="insertPerson">
    INSERT INTO Person.java TO Database
</insert>

1 个答案:

答案 0 :(得分:0)

  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 (#{...}, ...);";
        }
    }