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编程风格。

