Java中的个人项目,如何处理数据库访问?

时间:2010-12-26 18:47:26

标签: java oop design-patterns jdbc

我在java中的第一个项目将是一个程序(最终我必须创建一个GUI界面,但现在CLI会这样做)来跟踪我的书(类似于库只有一个更简单的东西)。 我需要能够插入,更新,删除,显示所有书籍,更新,搜索(按名称或作者或日期)。

对于设计我正在考虑一个主类库,它将具有连接到数据库并检索数据的所有上述方法。

这种方法可以吗?我意识到这很简单,但这是我的第一个真正的项目,我希望得到一些反馈。

此外,考虑阅读设计模式和数据库设计还为时尚早吗?

5 个答案:

答案 0 :(得分:5)

您想要查找DAO (Data Access Object)模式。

首先,创建一个代表一本书的Javabean类(也称为实体)。

public class Book {

    private Long id;
    private String title;
    private String author;
    private Date date;

    // Add/generate c'tor/getter/setter/hashcode/equals/tostring boilerplate.
}

然后,创建一个DAO类,在书上执行所需的操作。

public class BookDAO {

    public Book find(Long id) throws SQLException {
        // ...
    }

    public List<Book> search(Book example) throws SQLException {
        // ...
    }

    public List<Book> list() throws SQLException {
        // ...
    }

    public List<Book> listByDate(Date before, Date after) throws SQLException {
        // ...
    }

    public void save(Book book) throws SQLException {
        // ...
    }

    public void delete(Book book) throws SQLException {
        // ...
    }

}

在这个类中,您可以编写所有必需的JDBC样板。

最后,您最终会以下列方式使用它:

Book newBook = new Book("Pro JPA 2", "Merrick Schincariol");
bookDAO.save(newBook);
// ...
Book book = bookDAO.find(1L);
// ...
List<Book> allBooks = bookDAO.list();
// ...
List<Book> matchingBooks = bookDAO.search(new Book(null, "Schincariol"));
// ...

您可以找到包含基本启动示例here的详细文章。


为了更进一步,您可能会发现JPA(Java Persistence API)很有趣。它在JDBC上添加了一个额外的层,以便您可以以更面向对象的方式与DB交互,而无需编写所有JDBC样板。确实,它是Java EE的一部分,但您也可以单独使用它。有关在桌面/客户端应用程序中使用JPA的信息,请参阅this tutorial

答案 1 :(得分:1)

你至少还需要课堂书 - 很难想象你的图书馆界面会是什么样子。一个好主意是使库接口而不是类,因此您可以有多个存储实现 - 现在您想要使用数据库,那么您可能希望突然使用XML。我还建议不要将Library类设为main,而是创建一个单独的LibraryCLI类。然后你可以在以后添加LibraryGUI而无需对Library类本身做任何事情。分离总是好的。

不,从来没有太早阅读设计模式。你越早开始理解这些事情就越好。否则,您将最终得到无法使用且不可维护的代码。好吧,你最终会得到一些,只是程度较小,如果你至少在实现它们之前试图弄清楚如何做事,它可能会更容易修复。

答案 2 :(得分:1)

虽然对于您的小型个人应用程序可能过度,但您可能需要考虑采用三层方法。使用n层架构,数据管理在逻辑上分为不同的层。例如,三层通常为UI -> Business Logic -> Data Access

每个图层只能识别它下面的图层。 UI调用业务层,调用数据访问层,最终查询数据库。这些层本身也是多层的也很常见。例如,使用DAO设计模式通常也是一种好习惯,但也使用服务层进一步抽象DAO层并可能执行其他业务逻辑,因此您的体系结构可能如下所示:

UI => Business Logic => Service => DAO

在您的情况下,您的域模型非常简单。您有一个域实体,一本书。这是唯一的持久类。再一次,像Hibernate这样的ORM框架可能过度,但它是一个非常方便的学习工具。它可能值得使用,因为它使数据持久性非常容易。

答案 3 :(得分:0)

我建议您使用Hibernate,这是一种使用面向对象的数据库接口的工具。在您的项目中,您将拥有一组与数据库实体相对应的bean类以及一些XML配置和映射文件。还有一个逆向工程工具,可以从数据库中自动创建这些类和XML。所以你可以这样做:设计数据库(从实体关系方案开始),创建它,在Eclipse中安装Hibernate,运行Hibernate逆向工程然后启动程序设计(首先在纸上然后用代码;这样你就可以避免之后的烦恼。

Hibernate是一个高级工具。如果您正在编写此程序只是为了学习Java和数据库访问,那么最好从基础知识(JDBC等)开始。

无论如何,我确信已经有很多管理书籍的程序。就个人而言,我更喜欢社交网络anobii.com,在那里你可以管理和交换书籍!但我猜你的节目是一个练习。

答案 4 :(得分:-3)

使用设计模式会更好,而不是使用静态方法。