javaservlet与持久化结构
我有一个JavaWebApp,它有一个ServletDoPost,它接受一些json帖子。让我们称之为“人”。所以它收到类似{名字:“乔”,年龄:35}的东西。还有一个jackson的数据绑定类,它捕获了这个。。。像javaservlet与持久化结构,java,jdbc,jackson,Java,Jdbc,Jackson,我有一个JavaWebApp,它有一个ServletDoPost,它接受一些json帖子。让我们称之为“人”。所以它收到类似{名字:“乔”,年龄:35}的东西。还有一个jackson的数据绑定类,它捕获了这个。。。像 public class Person { public String name; public int age; } 我目前在Servlet类中发生了DB事件。因此,与servlet一样,servlet接收请求,将其反序列化为Person对象,然后获取结果对象,创建JD
public class Person {
public String name;
public int age;
}
我目前在Servlet类中发生了DB事件。因此,与servlet一样,servlet接收请求,将其反序列化为Person对象,然后获取结果对象,创建JDBC连接并运行插入。构建此结构的最佳方式是什么?这样行吗?我觉得持久性应该更多地链接到对象本身,而不是servlet。我应该将DB功能放入Person obj中吗?或者创造一些新的“东西”来处理它
我觉得持久性应该更多地链接到对象本身
而不是servlet
两者都不正确,基本上,我们需要正确地分层应用程序,即,我们应该不要混淆前端(用户界面)关注点和业务逻辑,并查看下面关于分层web应用程序的更多说明
我应该将DB功能放入Person obj中吗?或者创造一些
新的“东西”来处理它
不,您需要单独处理数据访问层,就像使用DAO(数据访问对象)或存储库层一样
通常,web应用程序体系结构的工作原理如下:
HTML/JSP->Servlet和控制器类->服务层->DAO层->数据库
这些层中的每一层都有其自身的原因,我们不应该混淆这些问题
现在特别讨论DAO层(看看这里的模式是如何工作的),有各种各样的框架可以使事情变得更简单,而ORM(对象关系映射)是您可能感兴趣的概念。仅举几个例子,流行的ORM框架是和
更新:
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
}
因此,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不是一个好做法,因为一个处理业务逻辑,另一个用于用户界面(前端),两者都应松散耦合So,servlet接受请求,将数据反序列化到一些与json模式匹配的数据绑定类。然后,它将这些数据传递给某个“服务层”,该服务层执行某种操作,并生成与表结构匹配的DAO对象,并将其保存下来?添加了一个示例,看看上面,如果请求和数据模型之间存在不匹配怎么办。。。比如,你收到一个类似“person”json的帖子,“{name:joe,age:21,address:{street:fake,city:sattle}}把它发送给一个“person”控制器,该控制器创建一个“person”POJO和一个“PersonDAO”,然后利用一个“AddressDAO”来做任何数据操作?更新了我的答案,你可以检查它