mybatis插入一个包含另一个对象的对象

时间:2015-01-29 17:40:03

标签: mybatis

我们说我有两个表:userHeader和userDetail,相应的域类如下:

    UserHeader:
    String user_id;
    String user_password;
    UserDetail userDetail;

    UserDetail:
    String user_id;
    String user_name;
    String phone;

选择,我可以在xml中使用关联标记,这样我就可以得到一个包含userDetail对象的userHeader对象。

对于insert,我有一个userHeader对象,它包含一个userDetail对象,为了将记录插入两个表,我该怎么办?我应该写两个插入方法单独插入记录还是有类似于关联标记的东西?

1 个答案:

答案 0 :(得分:1)

没有关联标记或映射。您可以采取两种方法(如果您想坚持使用MyBatis而不是使用ORM lib):

1在Mapper接口和xml上定义一个新方法。您可以访问xml上的userHeader.userdetail.user_name等每个属性,以便根据需要编写插入内容

  

好处:对SQL进行任意数量的SQL插入调用(变体:创建并调用数据库过程)

     

缺点:如果数据库添加了列,则必须对Mapper XML进行手动更改(如果定义了列,则必须执行过程)

2使用MyBatis生成器,然后在服务层上定义自定义插入。撰写每个插入并提交sqlsession.commit();

  

好处:更容易维护DB和java模型更新(这将为您提供CRUD并在生成时选择)

     

缺点:单独的SQL调用(从Java代码到数据库 - 尽管我认为在非分布式系统中性能影响很小),生成器将覆盖您的自定义更改(如UserDetail userDetail;),除非您使用mybatis生成器Eclipse插件或使用生成器插件在wrappedObject上定义自定义关系。

没有关联映射源:使用Jeff Butler和维基百科的消息(与ORM框架不同,MyBatis不会将Java对象映射到数据库表,而是将Java方法映射到SQL语句)

方法来源:个人经验。