我们说我有两个表: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对象,为了将记录插入两个表,我该怎么办?我应该写两个插入方法单独插入记录还是有类似于关联标记的东西?
答案 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语句)
方法来源:个人经验。