如何使用 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>
- 不,你不想要它。不要像 Spring Data 或 Hibernate 一样使用 MyBatis。
关于自动转换。您应该为所有相关类型(在我们的情况下为 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 (#{...}, ...);";
}
}
众所周知,在使用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>
- 不,你不想要它。不要像 Spring Data 或 Hibernate 一样使用 MyBatis。
关于自动转换。您应该为所有相关类型(在我们的情况下为 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 (#{...}, ...);"; } }