Java servlet和持久性结构

时间:2017-04-11 17:29:09

标签: java jdbc jackson

我有一个java webapp,它有一个servlet doPost接受一些json POST。让我们称之为" Person"。所以它会收到类似{name:" Joe",年龄:35}的内容。然后还有杰克逊的数据绑定类,可以捕获这个......就像

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

我目前在Servlet类中发生了数据库事务。因此,就像servlet接收请求一样,将其反序列化为Person对象,然后获取结果对象并创建JDBC连接并运行插入。构建这个的最佳方法是什么?这样可以吗?我觉得持久性应该更多地与对象本身相关联而不是与servlet相关联。我应该将数据库功能放入Person obj吗?或者创造一些新的东西&#34;处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

  

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

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

  

我应该将数据库功能放入Person obj吗?或者创造一些   处理它的新“事”?

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

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

HTML / JSP - &gt; Servlet&amp;控制器类 - &gt;服务层 - &gt; DAO层 - &gt;数据库

这些层中的每一层都是出于其自身原因,我们不应该混淆这些问题。

现在专门讨论DAO层(看这里DAO模式如何工作),有各种框架可以使事情变得更容易,而ORM(对象关系映射)是你可能感兴趣的概念。简而言之,流行的ORM框架是HibernateSpring data 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的好方法,因为一个处理业务逻辑和另一个是用户界面(前端),两者都应该松散耦合