繁体   English   中英

如何更改我的Java程序以使用数据库而不是arraylist?

[英]How can I change my Java program to use a database instead of an arraylist?

在我的java程序中,我有一个书类和一个库类。 该库将图书对象存储在数组列表中,然后将其显示在屏幕上。

我可以添加书籍并使用功能删除书籍。

我还使用AbstractJtableModel来添加和删除书籍。

但现在我想使用数据库MySQL,而不是数组列表。

我应该如何改变我的计划?

好吧,你需要编写整个应用程序:)你需要创建一个db,至少有一个表,你需要将mysql jdbc库添加到classpath并使用jdbc你可以插入/选择/更新/删除数据来自DB。

或者,您需要添加jdbc并使用像Hibernate这样的ORM框架,但是根据您的Java知识,这种方式可能更难(但如果您创建大型应用程序,将来更容易维护)。 在这里你可以下载简单的hibernate应用程序,它使用Honey :)进行CRUD操作,你可以从TestExample类中提取类似于Javid Jamae建议的界面,并根据你的需要与Book交换Honey类

摘要将书籍检索和存储到一个类中 - 您不希望持久性逻辑与您的业务逻辑混合在一起。 我建议创建一个名为“BookStorageDAO”的接口,然后你可以拥有该接口的各种实现。 一种实现可以是将书籍存储在ArrayList中,而另一种实现可以是将书籍存储在数据库中。

通过这种方式,您可以在业务逻辑中使用该接口,并随时交换实现。

您可以考虑使用数据访问对象(DAO)模式。 只需进行Google搜索,您就会找到大量有关该主题的文章。 基本上,您将使用以下方法创建LibraryDao接口:

public interface LibraryDao {
    public void storeLibrary(Library library)
    public Library loadLibrary(long id)
    public List<Library> searchByTitle(String title)
    //...
}

您可以使用直接SQL实现此接口,也可以使用对象关系映射(ORM)工具来实现它。 我强烈建议您阅读Hibernate和JPA规范。

您仍然可以使用GUI中的ArrayList来持久化并显示数据。 不同之处在于您需要逻辑来保存和加载数据库中的ArrayList,以便即使在程序结束后也可以存储数据。

旁注,扩展DefaultTableModel而不是AbstractJtabelModel 它为您完成了一些方法。

您本身不需要DAO,但这些答案没有错。

分离关注

您需要做的是根据关注点分离您的应用程序,这是一种称为关注点分离的模式。 关注问题是一个漏洞,因此为了解决这个问题,您可以根据需要将应用程序分成多个层或一个堆栈。 典型的堆栈可能包括:

Data Access Layer (read/write data)
Service Layer (isolated business logic)
Controller (Link between view and model)
Presentation (UI)

等等,但这只会部分解决你的问题。

程序到界面

你也(正如其他人提到的那样)需要抽象你的代码,这将允许你使用依赖注入 这非常容易实现。 您所要做的就是编程到界面

public interface PersonService {
   public List<Person> getAllPersons();
   public Person getById(String uuid);
}

所以你的应用程序看起来像这样:

public class PersonApp {
    private final PersonService personService;
    public PersonApp(PersonService personService) {
        this.personService = personService;
    }
}

为什么这样更好?

您已在界面中定义了与Person模型交互的合同,并且您的应用程序遵守此合同,而不会接触实施细节。 这意味着您可以使用Hibernate实现PersonService,然后决定要使用JPA,或者您可以使用直接JDBC,Spring等等,即使您必须重构实现代码,您的应用程序代码仍然存在相同。 您所要做的就是将新实现放在类路径上并找到它(提示: 服务定位器模式适用于此)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM