Java DAO对象事务

时间:2015-04-08 13:44:53

标签: java interface transactions persistence dao

我对此服务及其DAO对象如何执行持久性事务有疑问。

服务正在数据库上执行事务 - 但它没有使用DAOImpl对象 - 而是使用作为接口实例的对象 - 并且自然没有任何方法签名的实现。在我看来,这不应该能够执行任何有意义的行动。我在这里忽略了什么吗?

代码的完整链接

http://www.byteslounge.com/tutorials/spring-with-hibernate-persistence-and-transactions-example

@Service
public class UserManagerImpl implements UserManager {

  @Autowired
  private UserDAO userDAO;

  @Override
  @Transactional
  public void insertUser(User user) {
    userDAO.insertUser(user);
  }

  @Override
  @Transactional
  public User getUserById(int userId) {
    return userDAO.getUserById(userId);
  }

  @Override
  @Transactional
  public User getUser(String username) {
    return userDAO.getUser(username);
  }

  @Override
  @Transactional
  public List<User> getUsers() {
    return userDAO.getUsers();
  }

}


public interface UserDAO {

      void insertUser(User user);

      User getUserById(int userId);

      User getUser(String username);

      List<User> getUsers();
    }


@Service
public class UserDAOImpl implements UserDAO {

  @Autowired
  private SessionFactory sessionFactory;

  @Override
  public void insertUser(User user) {
    sessionFactory.getCurrentSession().save(user);
  }

  @Override
  public User getUserById(int userId) {
    return (User) sessionFactory.
      getCurrentSession().
      get(User.class, userId);
  }

  @Override
  public User getUser(String username) {
    Query query = sessionFactory.
      getCurrentSession().
      createQuery("from User where username = :username");
    query.setParameter("username", username);
    return (User) query.list().get(0);
  }

  @Override
  @SuppressWarnings("unchecked")
  public List<User> getUsers() {
    Criteria criteria = sessionFactory.
      getCurrentSession().
      createCriteria(User.class);
    return criteria.list();
  }

}

1 个答案:

答案 0 :(得分:1)

首先,无法创建接口实例,可以为接口创建引用变量。然而,当我按照链接发现你正在学习Spring with Hibernate。 Spring为您提供了一个名为Dependency Injection的工具,这就是为什么在UserManagerImpl类中有@Autowire注释,这意味着您在UserManagerImpl类中注入了一个依赖UserDAO,所以在朗姆酒时间,spring将提供实现UserDAO接口的类的实例。你所忽略的是对春天概念的全面研究。通过最好的方式。