2016-08-04 251 views
4

我的项目中有一个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; 
     } 
    } 

这里是我的服务层的类和接口。

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

} 

什么我需要写入我的服务方法,我可以使异常捕获时回滚?如何在我的服务方法中写入交易?你能告诉我一些例子吗?感谢名单!

+1

在Java EE一下,您通常使用EJB了点。这是否适用于您的环境?因为您使用JDBC样板代替JPA oneliner,这一事实强烈建议您使用像Tomcat这样的准系统servlet容器,而不是普通的Java EE服务器。 – BalusC

回答

0

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

如果您有独立的链接原子操作,则使用事务。这意味着如果您需要回滚一个错误。 如果你现在想要手动实现它,你必须看看你已经做了什么来点X,然后撤消发生的所有事情。但它非常容易出错并且非常不灵活。因此,我建议使用底层数据库系统来达到这个目的,并将这种功能集成在一起。或者使用持久层。

如果使用JDBC驱动程序compiant这里采取https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

+0

只是一个侧面的问题。我希望你不会以纯文本存储你的密码? – sascha10000

+1

不!我会哈哈哈哈! –