【发布时间】:2011-05-01 04:38:36
【问题描述】:
我在实现服务层时遇到了麻烦,我想我不太了解这个概念。
在 DAO 实现中,我可以为特定技术和实体(例如休眠和用户表)编写所有 CRUD 逻辑,而在服务层中,我们使用 DAO 对 DAO 中的实体进行所有数据操作(如 getUser、 loginUser 等)这样可以吗?
如果没问题,我有一个简单的问题,我可以在服务层、DAO 实现中处理数据库连接(或者在休眠、会话和事务的情况下)吗?
例如,我有一个带有一个按钮的简单 GUI(加载所有用户),并且一个表将包含所有用户。按下按钮将加载所有用户的表格。
我有一个用于用户实体的 HibernateDAO (UserHibernateDAO),其中包含所有 CRUD 操作和一个服务层 UserService,用于与用户进行一些特定的数据操作。
服务层:
public class UserService extends AbstractServiceLayer{
private AbstractDAO dao;
public UserService(AbstractDAO dao){
this.dao=dao;
}
public List<User> loadAllUsers(){
return dao.findAll();
}
}
在按钮的执行中:
private void buttonActionPerformed(ActionEvent evt) {
Transaction transaction=HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
List<User> users=userService.loadAllUsers();
loadTableWithUsers(users);
transaction.commit();
}
这个实现好吗? 会话和事务句柄处于正确位置还是我必须将其放入服务层? ..或者也许进入道?
EDIT1:
如果我有一个接口 UserDAO 和一个实现 UserDAO 的 UserHibernateDAO,服务层就没有理由存在,不是吗? 因为我可以拥有所有方法来管理我的 UserDAO 中的“用户”,而 UserHibernateDAO 实现了所有这些用于休眠技术的方法......然后我可以拥有 UserJdbcDAO、UserMysqlDAO 等......嗯......
EDIT2:
private void buttonActionPerformed(ActionEvent evt) {
myBusinessMethod();
}
private void myBusinessMethod(){
Transaction transaction=HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
List<User> users=userService.loadAllUsers();
loadTableWithUsers(users);
//some other useful operation before close session
transaction.commit();
}
我不确定,业务方法是这样的方法吗?
谢谢大家。
【问题讨论】:
-
我想,我已经回答了你的
edit:)。请参阅我的第二个建议。
标签: java hibernate session transactions dao