2012-01-05 76 views
1

我有两个域对象,让我们的人到我们用户的最佳方式:什么是使用Spring的JdbcTemplate

  1. 用户(其中​​有一个人)

FYI :在我们的域名中有人员(人员:-)不是用户,所以我们不能将它们合并。

我想弄清楚将Person对象填充到User对象中的最佳方法。我已经提出了3种可能的解决方案,并对其他人的做法以及其他人可以看到的利弊感到好奇。

选项1:

有我们的UserDAO和PersonDao的有线到我们Userservice,然后有userService.getUser(userId)呼叫userDAO.getUser(userId)然后拿我们从取回用户和呼叫user.setPerson(personDao.getPerson(user.getPersonId()))

优点:唐'不得不在电讯局内道(不是那么糟糕...不知道)

缺点:有些事情似乎错了关于hav ing dao返回一个没有完全初始化的域对象吗?那么你不得不担心用户对象中是否有人。打两次数据库。此外,您还必须将personId添加到User对象,而不是仅具有Person对象。

选项2: 有userDAO的的的getUser()方法加入用户表与人表,然后UserRowMapper设置里面的用户,然后调用user.setPerson(personRowMapper.mapRow(rs, rowNum))

优点:不必电线在一道道内道(不是那么糟......不知道)。此外,您只需击中数据库一次,而不是在其他选项中击中数据库两次。

缺点:PersonRowMapper将是它自己的类,不封装在PersonDao(它应该是?)。

方案3:

有PersonDao的有线到userDAO的,然后就打电话user.setPerson(personDao.getPerson(rs.getLong("person_id")));

优点:该PersonDao的负责获取个人域对象和userDAO的不需要知道如何检索此人的详细信息。

缺点:personDao连接到userDao(是那么糟糕?)。打两次数据库。

回答

1

这是第二种选择,因为您指出两次触击数据库代价高昂。

我有一个建议,而不是它应该是,用户是一个人(继承),而不是用户有一个人(构图)

+0

感谢您的答复。我同意...... Marten Deinum也是如此:)。 http://forum.springsource.org/showthread.php?120868-What-is-the-best-way-to-get-our-Person-into-our-User-using-spring-jdbcTemplate&p=395709#post395709。至于用户是一个人,在大多数情况下是正确的,但我们正在做的事情并不一定如此。再次感谢! – testing123 2012-01-06 15:42:35