DAO模式 - 我应该在哪里放置静态变量?

时间:2017-10-05 20:15:39

标签: java design-patterns dao

我有一个使用JSP Model 2架构的Web应用程序。

我也使用DAO模式;特别是,不同的方法需要productID之类的值,我希望这些值是唯一的。

/**
 * Updates the productID that is unique per JVM run.
 * @return the updated value of <i>productID</i>
 * @throws ClassNotFoundException if an error occurs with the connection to the database
 */
public static synchronized int createProductID() throws ClassNotFoundException{
    int maxID = QueriesDAO.maxIDInDatabase("product");
    while(productID <= maxID) {
        productID++;
    }
    return productID++;
}

该方法查询数据库并返回一个新ID,该ID存储在private static int productID = 0;中(0是指定的第一个值)。

我想问的是:我应该在哪里放置该查询和该变量?

目前,我有一个名为DAO的软件包,其中包含所有查询,例如UserDAO.java上的用户查询或ProductDAO.java上的产品查询等。 createProductID()方法和链接的变量存储在Main类中,但在我看来这不是正确的地方。我怎样才能改变模式?

使用界面可以解决方案吗?但是通过接口,我不能拥有可以托管productID变量的私有字段..

1 个答案:

答案 0 :(得分:0)

为什么需要查询最大ID?

您的数据库或持久性提供程序应该能够提供自动递增的顺序值,在将它们插入数据库时​​将自动分配给您的产品,这意味着您在插入之前永远不需要知道id是什么。 / p>

请参阅MySQL auto increment

如果您有充分的理由在插入前需要id:

考虑使用GUID。这些不是按顺序生成的ID(在大多数情况下),因此无需担心首先从数据库中查询最大ID。

关于你应该存储的地方 - 你不需要。 Java的UUID类是util包的一部分,可以在任何地方静态调用,并且是线程安全的。

查看文档here [JavaDoc]

还可以找到关于使用UUID的好文章here [编码恐怖]