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 语句)

方法来源:个人经验。