Рекомендуемая практика сохранения объекта БД в контроллере представления - PullRequest
0 голосов
/ 06 июля 2018

Я пришел из python / django, где я привык делать это в представлении, а django заботится обо всей магии db на заднем плане:

def register(request, email, password):
    User.objects.create(email=email, password=password)
    // Or, could do: user = User(); user.email = email; user.password=password; user.save()
    return redirect(...)

В java / spring я пытаюсь выяснить наилучшую практику выполнения вышесказанного. Вот что у меня сейчас:

@PostMapping("/register")
public String registerForm(HttpServletRequest request, HttpServletResponse response, Model model) throws ServletException, IOException {

    Session sessionOne = HibernateUtil.getSessionFactory().openSession();
    sessionOne.beginTransaction();

    //Create new user object
    UserEntity user = new UserEntity();
    user.saveUser(name, email, password);
    sessionOne.save(user);

    sessionOne.getTransaction().commit();
    HibernateUtil.shutdown();

}

А мой UserEntity выглядит примерно так:

@Entity
@Table(name = "users")
public class UserEntity {

    private String email;
    private String password;

    public null saveUser(String name, String email, String password) {

        this.name = name;
        this.email = email;
}

Вышеуказанный правильный способ сделать это? В частности, относительно следующего:

  • Нужно ли создавать сеанс через HibernateUtil и выключать его при каждом запросе на просмотр?
  • Нужно ли начинать сеанс, сохранять сеанс и затем каждый раз фиксировать транзакцию?
  • Куда мне помещать методы сохранения / транзакции, в контроллере представления, или в UserEntity, или где-то еще?

Вышесказанное кажется мне очень запутанным: я думаю, что было бы проще напрямую запрашивать базу данных, а не делать все создание сеанса, сохранение, уничтожение и т. Д. Каждый раз, когда я открываю новое представление. Что было бы лучшим для этого?

1 Ответ

0 голосов
/ 06 июля 2018

Используйте Spring Data для связи с Hibernate.

устаревший пример: https://github.com/azee/spring-boot-jpa-example

Вы создадите классы репозиториев для каждой из ваших сущностей. Все взаимодействие с БД будет осуществляться там. В большинстве случаев достаточно реализации, предоставленной Spring Data.

Постарайтесь, чтобы ваши контроллеры управляли бизнес-логикой. Взаимодействие с базой данных должно управляться отдельным модулем. Представьте, хотите ли вы изменить свою базу данных с Postgre на Mongo? Вам придется заменить только слой БД. Кроме того, вы разделяете бизнес-логику и внутренности БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...