Java DAO 对象事务

标签 java interface transactions persistence dao

我有一个关于此服务及其 DAO 对象如何执行持久性事务的问题。

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

完整代码链接

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();
  }

}

最佳答案

首先,接口(interface)的实例不能被创建,接口(interface)可以创建引用变量。尽管如此,当我点击链接时,发现您正在使用 Hibernate 学习 Spring。 Spring为您提供了一个称为依赖注入(inject)的工具,这就是为什么您的UserManagerImpl类中有@Autowire注释,这意味着您已经在UserManagerImpl类中注入(inject)了依赖项UserDAO,所以在朗姆时间,spring将提供实现UserDAO接口(interface)的类的实例。您所忽略的是对 Spring 概念的深入研究。顺便说一句,祝一切顺利。

关于Java DAO 对象事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29516449/

相关文章:

带有扩展对象的动态键的 typescript 接口(interface)

sql - 奇怪的 SQL2005 问题。 "SqlConnection does not support parallel transactions"

java - 防止mysql脏读

java - 修改JLabel的ImageIcon

java - 当我尝试设置 onClickListener 时应用程序崩溃

java - 读取保存文件时如何管理文本格式?

java - 任何人都知道通用事务 map |设置|列表

java - 我可以将列表作为参数传递给 Scala/Java 中以这种方式定义的方法 detectorFormatAutomatically(delimitersForDetection :Char*)

c++ - c# 在 C++ 中重写的方法

vb.net - 如何以与 VB.NET 类似的方式在 VBA 中的类对象模块之间使用比较方法?