Как совершать транзакции в сервисном слое

У меня есть слой 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);

}

Что мне нужно записать в мой сервисный метод, чтобы я мог сделать откат при обнаружении исключения? Как правильно написать Transaction в моем сервисном методе? Не могли бы вы показать мне несколько примеров? Thanx!

1 ответ

Прежде всего, если возникнет исключение, ваш набор данных не будет вставлен, и поэтому он будет откатан.

Вы используете транзакции, если у вас есть отдельные атомарные операции, которые как бы связаны между собой. Это означает, что если один из ошибок вам нужно откатить. Если вы теперь хотите реализовать это вручную, вам придется посмотреть, что вы сделали, чтобы указать X, а затем отменить все, что произошло. Но это очень, очень подвержено ошибкам и супер негибко. Поэтому я рекомендую использовать для этой цели базовую DB-систему, в которой эта функциональность будет интегрирована. Или используйте постоянный слой.

Если вы используете драйвер JDBC, посмотрите здесь https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

Другие вопросы по тегам