mybatis 插入一个包含另一个对象的对象
mybatis insert a object which contains another object
假设我有两个表:userHeader和userDetail,对应的域类如下:
UserHeader:
String user_id;
String user_password;
UserDetail userDetail;
UserDetail:
String user_id;
String user_name;
String phone;
为了选择,我可以在 xml 中使用关联标签,这样我就可以获得一个包含 userDetail 对象的 userHeader 对象。
对于插入,我有一个 userHeader 对象,其中包含一个 userDetail 对象,我该怎么做才能将记录插入到两个表中?我应该写两个插入方法来分别插入记录还是有类似关联标签的东西?
没有关联标签或映射。你可以采取两种方法(如果你想坚持使用 MyBatis 而不是使用 ORM 库):
1 在 Mapper 接口和 xml 上定义一个新方法。您可以访问 xml 上的每个 属性(例如 userHeader.userdetail.user_name)来随意编写您的插入内容
benefits: a single call to the SQL for any number of SQL insertions (variation: create and call a DB procedure)
cons: Must do manual changes on the Mapper XML if the DB adds columns (and procedure if you define one)
2 使用 MyBatis 生成器,然后在服务层定义您的自定义插入。编写每个插入并提交 sqlsession.commit();
benefits: Easier to maintain DB and java model updated (which will give you CRUD and selects upon generation)
cons: separate SQL calls (from java code to DB - although i think performance impact is minimal specially in a non distributed system), generator will overwrite your custom changes (like UserDetail userDetail;
) unless you are using mybatis generator Eclipse plugin or define custom relationships on a wrappedObject with a generator pluggin.
无关联映射来源:Jeff Butler 和维基百科的消息(与 ORM 框架不同,MyBatis 不会将 Java 对象映射到数据库表,而是将 Java 方法映射到 SQL 语句)
方法来源:个人经验。
假设我有两个表:userHeader和userDetail,对应的域类如下:
UserHeader:
String user_id;
String user_password;
UserDetail userDetail;
UserDetail:
String user_id;
String user_name;
String phone;
为了选择,我可以在 xml 中使用关联标签,这样我就可以获得一个包含 userDetail 对象的 userHeader 对象。
对于插入,我有一个 userHeader 对象,其中包含一个 userDetail 对象,我该怎么做才能将记录插入到两个表中?我应该写两个插入方法来分别插入记录还是有类似关联标签的东西?
没有关联标签或映射。你可以采取两种方法(如果你想坚持使用 MyBatis 而不是使用 ORM 库):
1 在 Mapper 接口和 xml 上定义一个新方法。您可以访问 xml 上的每个 属性(例如 userHeader.userdetail.user_name)来随意编写您的插入内容
benefits: a single call to the SQL for any number of SQL insertions (variation: create and call a DB procedure)
cons: Must do manual changes on the Mapper XML if the DB adds columns (and procedure if you define one)
2 使用 MyBatis 生成器,然后在服务层定义您的自定义插入。编写每个插入并提交 sqlsession.commit();
benefits: Easier to maintain DB and java model updated (which will give you CRUD and selects upon generation)
cons: separate SQL calls (from java code to DB - although i think performance impact is minimal specially in a non distributed system), generator will overwrite your custom changes (like
UserDetail userDetail;
) unless you are using mybatis generator Eclipse plugin or define custom relationships on a wrappedObject with a generator pluggin.
无关联映射来源:Jeff Butler 和维基百科的消息(与 ORM 框架不同,MyBatis 不会将 Java 对象映射到数据库表,而是将 Java 方法映射到 SQL 语句)
方法来源:个人经验。