DAO代表数据访问对象。DAO设计Pattern用于将数据持久化逻辑分离在单独的层中。这样,该服务完全不知道访问数据库的低级操作是如何完成的。这就是所谓的逻辑分离 原则。
DAO设计模式
使用DAO设计模式,我们的设计依赖于以下组件:
- 从一层转移到另一层的模型。
- 提供灵活设计的interfaces。
- 接口实现,持久化逻辑的具体实现。
实现DAO模式
有了上面提到的组件,让我们尝试实现DAO模式。我们在这里将使用3个组件:
1.从一层到另一层的Book‘模型。 2.提供灵活设计和接口实现的
BookDao接口。 3.
BookDaoImpl具体类,是
BookDao`接口的实现。
让我们将这个逻辑放到图表中:
DAO模式模型类
现在,让我们把我们的模型对象。
1package com.journaldev.model;
2
3public class Books {
4
5 private int isbn;
6 private String bookName;
7
8 public Books() {
9 }
10
11 public Books(int isbn, String bookName) {
12 this.isbn = isbn;
13 this.bookName = bookName;
14 }
15
16 // getter setter methods
17}
它是一个简单的对象,只有两个属性来保持简单。
DAO模式接口
让我们定义一个接口来在持久层访问与之关联的数据。
1package com.journaldev.dao;
2
3import com.journaldev.model.Books;
4
5import java.util.List;
6
7public interface BookDao {
8
9 List<Books> getAllBooks();
10 Books getBookByIsbn(int isbn);
11 void saveBook(Books book);
12 void deleteBook(Books book);
13}
DAO模式实现
接下来,我们创建一个实现上述接口的具体类。
1package com.journaldev.daoimpl;
2
3import com.journaldev.dao.BookDao;
4import com.journaldev.model.Books;
5
6import java.util.ArrayList;
7import java.util.List;
8
9public class BookDaoImpl implements BookDao {
10
11 //list is working as a database
12 private List<Books> books;
13
14 public BookDaoImpl() {
15 books = new ArrayList<>();
16 books.add(new Books(1, "Java"));
17 books.add(new Books(2, "Python"));
18 books.add(new Books(3, "Android"));
19 }
20
21 @Override
22 public List<Books> getAllBooks() {
23 return books;
24 }
25
26 @Override
27 public Books getBookByIsbn(int isbn) {
28 return books.get(isbn);
29 }
30
31 @Override
32 public void saveBook(Books book) {
33 books.add(book);
34 }
35
36 @Override
37 public void deleteBook(Books book) {
38 books.remove(book);
39 }
40}
使用DAO模式
最后,我们将此实现用于我们的main()方法:
1package com.journaldev;
2
3import com.journaldev.dao.BookDao;
4import com.journaldev.daoimpl.BookDaoImpl;
5import com.journaldev.model.Books;
6
7public class AccessBook {
8
9 public static void main(String[] args) {
10
11 BookDao bookDao = new BookDaoImpl();
12
13 for (Books book : bookDao.getAllBooks()) {
14 System.out.println("Book ISBN : " + book.getIsbn());
15 }
16
17 //update student
18 Books book = bookDao.getAllBooks().get(1);
19 book.setBookName("Algorithms");
20 bookDao.saveBook(book);
21 }
22}
DAO模式的优势
使用DAO模式有很多优点。让我们在这里陈述其中的一些:
1.在更改持久化机制时,服务层甚至不需要知道数据来自哪里。例如,如果您正在考虑从使用MySQL转换到使用MongoDB,则所有更改只需要在DAO层中完成。
2.DAO模式强调应用程序不同组件之间的低耦合。因此,视图层不依赖于DAO层,只有服务层依赖于它,即使是具有接口的服务层也不依赖于具体的实现。
3.由于持久化逻辑是完全独立的,因此为单个组件编写单元测试要容易得多。例如,如果您使用JUnit和Mockito来测试框架,则可以很容易地模拟应用程序的各个组件。
4.在DAO模式下处理接口的同时,也强调了一种优秀的OOPS编程风格--接口而不是实现
。
刀模总结
在本文中,我们了解了如何使用DAO设计模式来强调保持持久性逻辑分离,从而使我们的组件松散耦合。设计模式只是基于一种编程方式,因此,语言和框架是独立的。欢迎在下面的评论中留下您的观点。从下面的链接下载DAO示例项目。