2016-08-04 169 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

不!我會哈哈哈哈! –