Java servlet 和持久性结构



我有一个java webapp,它有一个servlet doPost,它接受一些json POST。所以它收到类似{名称:"乔",年龄:35 }的东西。然后还有一个用于杰克逊的数据绑定类来捕获这个......喜欢

public class Person {
public String name;
public int age;
}

我目前在 Servlet 类中发生了数据库的东西。因此,就像 servlet 接收请求一样,将其反序列化为 Person 对象,然后获取该结果对象并创建一个 JDBC 连接并运行插入。构建此结构的最佳方法是什么?没事吧?我觉得持久性应该更多地链接到对象本身而不是 servlet。我应该将数据库功能放入 Person obj 中吗?或者创造一些新的"事物"来处理它?

我觉得持久性应该更多地与对象本身联系起来 而不是对 servlet。

两者都不正确,基本上,我们需要正确分层应用程序,即,我们不应该混淆前端(用户界面)问题和业务逻辑,并在下面查看有关分层 Web 应用程序的更多说明。

我应该将数据库功能放入 Person obj 中吗?或者创建一些 处理它的新"事物"?

不,您需要单独处理数据访问层,就像使用 DAO(数据访问对象)或存储库层一样。

通常,Web 应用程序体系结构的工作方式如下:

HTML/JSP -> Servlet & Controller classes -> Service Layer -> DAO Layer -> Database

这些层中的每一个都有其自身的原因,我们不应该混淆这些关注点。

现在专门讨论DAO层(看看这里DAO模式是如何工作的),有各种框架可以使事情变得更容易,ORM(对象关系映射)是你可能感兴趣的概念。仅举几例,流行的ORM框架是Hibernate和Spring数据JPA。


更新:

因此,servlet 接受请求,将数据反序列化为某些 与 JSON 架构匹配的数据绑定类。然后它将它们传递给 一些"服务层",执行某种操作并生成 与表结构匹配并将其保存的 DAO 对象?

你快到了,你唯一缺少的是 DAO 对象是单例类(它们不保存数据,只是它们提供访问数据库的方法),并且模型/实体 bean 真正用于保存数据。

您可以参考下面的简单示例,假设它正在访问数据库中的PRODUCT表:

ProductDAOImpl 类(单例对象):

public class ProductDAOImpl implements ProductDAO { //or ProductRepository
public boolean save(Product product) {
//add implementation
}
public List<Product> queryProducts() {
//add implementation
}
public Product queryUniqueProduct(String productId) {
//add implementation
}
//etc...any other methods you would like
}

产品类(来自客户端/用户的每个请求对应一个对象):

public class Product { //It is an Entity class
private String id;
private String name;
private int price;
//all other fields
//getters and setters
}

如果请求和数据模型不匹配怎么办?

始终确保表示层 bean 和实体(数据库)模型 bean 应该是分开的,即,在这两层之间共享 bean 不是一个好的做法,因为一个处理业务逻辑,另一个用于用户界面(前端),两者都应该松散耦合

最新更新