![](/img/trans.png)
[英]Java I think my question is How can I reuse an object to add 2 records into my database program
[英]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.