Java 在视图控制器中保存DB对象的建议做法

Java 在视图控制器中保存DB对象的建议做法,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我来自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() retur

我来自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创建会话,并在每次查看请求时将其关闭
  • 我是否需要开始会话、保存会话,然后每次提交事务
  • 我应该将保存/事务方法放在哪里、视图控制器中、用户实体中,还是放在其他地方

上面的内容对我来说似乎很复杂:我认为直接查询数据库比每次打开新视图时创建、保存、销毁所有会话更容易。这方面的最佳实践是什么?

使用Spring数据与Hibernate通信

一个过时的例子:

您将为每个实体创建存储库类。所有数据库交互都将在那里实现。在大多数情况下,由Spring数据提供的实现就足够了


尽量让控制器管理业务逻辑。数据库交互应通过单独的模块进行管理。想象一下,如果您想将数据库从Postgre更改为Mongo?您只需更换DB层。此外,还可以将业务逻辑和数据库内部结构解耦。

Spring数据部分的位置是什么?这是在服务中,还是应该在您的存储库中查找?也许在答案中贴一个例子,我会接受吗?另外,你能解释一下这四个目录是什么吗?bean、控制器、服务和dal?Spring数据是一个常用的库。你可以用谷歌搜索一下。我将所有应用程序拆分为逻辑部分。bean—系统中的对象。例如,实体。服务-业务逻辑层。Dal-数据访问层-与数据库的通信。再一次,这是一种过时的回购协议。寻找最新的spring数据教程。