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

标签 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应该有一个主表(person表)和一个外表(interests表)。

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

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

关于java - 如何使用 Mybatis 将 JavaBean 包含列表保存到 Sql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43629911/

相关文章:

java - 不幸的是,当我将 onClickListener 用作按钮时,应用程序已停止

java - 如何在mapstruct中将@Qualifier或@Named与@AfterMapping一起使用?

java - 如何为 getter 和 setter 修改 IDEA IntelliJ v10.x 代码生成器?

spring-mvc - Spring中更新多个数据库行-Mybatis

java - 在MyBatis中插入子对象

java - 在 Java 中初始化泛型

mysql - 如何在网络服务器上存储许多图像?

php - 如何以货币数字分组显示我的记录?

mysql - 为什么 HikariCP 在启动时为 Tomcat 中的每个 Web 应用程序创建新连接

java - 将 java.lang.String 类型映射到 Postgres JSON 类型