在我的java程序中,我有一个书类和一个库类。 该库将图书对象存储在一个数组列表中,然后我将其显示在屏幕上。
我可以添加书籍并使用功能删除书籍。
我还使用AbstractJtableModel添加和删除书籍。
但现在我想使用数据库MySQL,而不是数组列表。
我应该如何更改程序?
答案 0 :(得分:2)
或者,您需要添加jdbc并使用像Hibernate这样的ORM框架,但是根据您的Java知识,这种方式可能更难(但如果您创建大型应用程序,将来更容易维护)。 Here你可以下载简单的hibernate应用程序,它用Honey实现CRUD操作:),你可以从TestExample类中提取类似于Javid Jamae建议的界面,并根据你的需要用Book交换Honey类
答案 1 :(得分:1)
摘要将书籍检索和存储到一个类中 - 您不希望持久性逻辑与您的业务逻辑混合在一起。我建议创建一个名为“BookStorageDAO”的接口,然后你可以拥有该接口的各种实现。一种实现可以是将书籍存储在ArrayList中,而另一种实现可以是将书籍存储在数据库中。
通过这种方式,您可以在业务逻辑中使用该接口,并随时交换实现。
答案 2 :(得分:1)
您可以考虑使用数据访问对象(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规范。
答案 3 :(得分:0)
您仍然可以使用GUI中的ArrayList来持久化并显示数据。不同之处在于您需要逻辑来保存和加载数据库中的ArrayList,以便即使在程序结束后也可以存储数据。
旁注,扩展DefaultTableModel
而不是AbstractJtabelModel
。它为您完成了一些方法。
答案 4 :(得分:0)
您本身不需要DAO,但这些答案没有错。
分离关注
您需要做的是根据关注点分离您的应用程序,这是一种名为separation of concern的模式。关注问题是一个漏洞,因此为了解决这个问题,您可以根据需要将应用程序分成多个层或一个堆栈。典型的堆栈可能包括:
Data Access Layer (read/write data)
Service Layer (isolated business logic)
Controller (Link between view and model)
Presentation (UI)
等等,但这只能部分解决你的问题。
编程到界面
您也(正如其他人提到的那样)需要抽象您的代码,这样您就可以使用dependency injection。这非常容易实现。您所要做的就是program to the interface:
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等等,即使您必须重构实现代码,您的应用程序代码仍然存在相同。您所要做的就是将新实现放在类路径上并找到它(提示:Service Locator pattern可以很好地工作)。