【问题标题】:How to make Transactions in Service Layer如何在服务层进行事务
【发布时间】:2016-12-11 05:54:56
【问题描述】:

我的项目中有一个 DAO 层。这是我的 UsersDao 接口及其实现 UsersDaoImpl

     public interface UsersDao {    
public Users insert(Users object); 
}



public class UsersDaoImpl implements UsersDao {

    @Override
    public Users insert(Users object) {

        String sqlQuery = null;
        PreparedStatement stmt = null;

        try (Connection connection = DbConnector.getConnection()) {

            sqlQuery = "INSERT INTO `users`(login, password,passwordSalt, name, surname)" + " values (?, ?,?,?,?);";

            stmt = connection.prepareStatement(sqlQuery);

            stmt.setString(1, "fsf");
            stmt.setString(2, "f");
            stmt.setString(3, "af");
            stmt.setString(4, "fddsg");
            stmt.setString(5, "sdgsgd");
            stmt.executeUpdate();
            stmt.close();
            return object;

        } catch (SQLException e) {
            System.err.println(e.getMessage());
            return null;
        }
    }

这是我的 Service 层类和接口。

public interface UsersService{
public Users insert(Users object);
}

public class UsersServiceImpl implements UsersService{
UsersDaoImpl users = new UsersDaoImpl();

public Users insert(Users object){

return users.insert(object);

}

我需要在我的服务方法中写入什么,以便在捕获异常时进行回滚?如何在我的服务方法中正确编写事务?你能给我看一些例子吗?谢谢!

【问题讨论】:

  • 在 Java EE 中,通常使用 EJB 来实现。这在您的环境中可用吗?因为您使用 JDBC 样板而不是 JPA oneliners 这一事实强烈表明您使用的是像 Tomcat 这样的准系统 servletcontainer 而不是普通的 Java EE 服务器。

标签: java servlets transactions dao service-layer


【解决方案1】:

首先,如果发生异常,您的数据集将不会被插入,因此会回滚。

如果您有独立的、链式的原子操作,则可以使用事务。这意味着如果出现一个错误,您需要回滚。 如果您现在想手动实现它,则必须查看您对 X 点所做的操作,然后撤消所有发生的事情。但它非常容易出错并且超级不灵活。因此,我建议为此目的使用底层 DB-System,它将集成此功能。或者使用持久层。

如果您使用 JDBC 兼容驱动程序,请查看此处https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

【讨论】:

  • 只是一个附带问题。我希望您不要以纯文本形式存储密码?
猜你喜欢
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2013-05-16
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
相关资源
最近更新 更多