DAO设计模式
时间:2020-02-23 14:41:17 来源:igfitidea点击:
DAO代表数据访问对象。
DAO设计模式用于在单独的层中分离数据持久性逻辑。
这样,该服务完全不了解如何完成访问数据库的低级操作。
这就是所谓的逻辑分离原理。
DAO设计模式
使用DAO设计模式,我们具有设计所依赖的以下组件:
从一层转移到另一层的模型。
提供灵活设计的接口。
接口实现是持久性逻辑的具体实现。
实施DAO模式
使用上述组件,我们尝试实现DAO模式。
我们将在这里使用3个组件:
Book模型从一层转移到另一层。
BookDao接口提供了灵活的设计和API来实现。
BookDaoImpl
具体类,是BookDao
接口的实现。
让我们将此逻辑放入图表中:
DAO模式模型类
现在,让我们建立模型对象。
package com.theitroad.model; public class Books { private int isbn; private String bookName; public Books() { } public Books(int isbn, String bookName) { this.isbn = isbn; this.bookName = bookName; } //getter setter methods }
这是一个简单的对象,只有2个属性,可以使事情保持简单。
DAO模式界面
让我们定义一个接口,以持久性级别访问与其关联的数据。
package com.theitroad.dao; import com.theitroad.model.Books; import java.util.List; public interface BookDao { List<Books> getAllBooks(); Books getBookByIsbn(int isbn); void saveBook(Books book); void deleteBook(Books book); }
DAO模式实施
接下来,我们创建一个实现上述接口的具体类。
package com.theitroad.daoimpl; import com.theitroad.dao.BookDao; import com.theitroad.model.Books; import java.util.ArrayList; import java.util.List; public class BookDaoImpl implements BookDao { //list is working as a database private List<Books> books; public BookDaoImpl() { books = new ArrayList<>(); books.add(new Books(1, "Java")); books.add(new Books(2, "Python")); books.add(new Books(3, "Android")); } @Override public List<Books> getAllBooks() { return books; } @Override public Books getBookByIsbn(int isbn) { return books.get(isbn); } @Override public void saveBook(Books book) { books.add(book); } @Override public void deleteBook(Books book) { books.remove(book); } }
使用DAO模式
最后,我们在main()方法中使用此实现:
package com.theitroad; import com.theitroad.dao.BookDao; import com.theitroad.daoimpl.BookDaoImpl; import com.theitroad.model.Books; public class AccessBook { public static void main(String[] args) { BookDao bookDao = new BookDaoImpl(); for (Books book : bookDao.getAllBooks()) { System.out.println("Book ISBN : " + book.getIsbn()); } //update student Books book = bookDao.getAllBooks().get(1); book.setBookName("Algorithms"); bookDao.saveBook(book); } }
DAO模式的优势
使用DAO模式有很多优点。
让我们在这里说明其中一些:
在更改持久性机制时,服务层甚至不必知道数据来自何处。
例如,如果您打算从使用MySQL过渡到MongoDB,则所有更改仅需要在DAO层中完成。DAO模式强调应用程序不同组件之间的低耦合。
因此,视图层不依赖于DAO层,而仅服务层依赖于DAO层,即使依赖于接口,也不依赖于具体的实现。由于持久性逻辑是完全独立的,因此为单个组件编写单元测试要容易得多。
例如,如果您将JUnit和Mockito用于测试框架,则可以轻松模拟应用程序的各个组件。当我们以DAO模式使用接口时,它还强调了"使用接口代替实现"的风格,这是一种出色的OOPs编程风格。