javaservlet与持久化结构

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

我有一个JavaWebApp,它有一个ServletDoPost,它接受一些json帖子。让我们称之为“人”。所以它收到类似{名字:“乔”,年龄:35}的东西。还有一个jackson的数据绑定类,它捕获了这个。。。像

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”来做任何数据操作?更新了我的答案,你可以检查它