JournalDev

Java, Java EE, Android, Python, Web Development Tutorials

  • Java Tutorial
  • #Index Posts
    • Core Java Tutorial
    • Java Design Patterns
    • Servlet JSP Tutorial
    • Struts 2 Tutorial
    • Spring Tutorial
    • JSF Tutorial
    • Primefaces Tutorial
    • JDBC Tutorial
    • Hibernate Tutorial
    • MongoDB Tutorial
  • #Interview Questions
    • Java Interview Questions
    • Core Java Interview Questions
    • JDBC Interview Questions
    • Servlet Interview Questions
    • JSP Interview Questions
    • Struts2 Interview Questions
    • Spring Interview Questions
    • Hibernate Interview Questions
    • JSF Interview Questions
  • Resources
You are here: Home » Java » Design Patterns » DAO Design Pattern

DAO Design Pattern

Shubham 3 Comments

DAO stands for Data Access Object. DAO Design Pattern is used to separate the data persistence logic in a separate layer. This way, the service remains completely in dark about how the low-level operations to access the database is done. This is known as the principle of Separation of Logic.

Table of Contents

  • 1 DAO Design Pattern
    • 1.1 Implementing DAO pattern
    • 1.2 DAO Pattern model Class
    • 1.3 DAO Pattern Interface
    • 1.4 DAO Pattern Implementation
    • 1.5 Using DAO Pattern
    • 1.6 Advantages of DAO pattern
    • 1.7 DAO Pattern Conclusion

DAO Design Pattern

With DAO design pattern, we have following components on which our design depends:

  • The model which is transferred from one layer to the other.
  • The interfaces which provides a flexible design.
  • The interface implementation which is a concrete implementation of the persistence logic.

Implementing DAO pattern

With above mentioned components, let’s try to implement the DAO pattern. We will use 3 components here:

  1. The Book model which is transferred from one layer to the other.
  2. The BookDao interface that provides a flexible design and API to implement.
  3. BookDaoImpl concrete class that is an implementation of the BookDao interface.

Let us put this logic into a diagram:

DAO Pattern

DAO Pattern model Class

Now, let’s put up our model object.

Copy
package com.journaldev.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 }

It is a simple object with just 2 properties to keep things simple.

DAO Pattern Interface

Let’s define the interface to access the data associated with it at persistence level.

Copy
package com.journaldev.dao; import com.journaldev.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 Pattern Implementation

Next, we create a concrete class implementing the above interface.

Copy
package com.journaldev.daoimpl; import com.journaldev.dao.BookDao; import com.journaldev.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); } }

Using DAO Pattern

Finally, we put this implementation to use in our main() method:

Copy
package com.journaldev; import com.journaldev.dao.BookDao; import com.journaldev.daoimpl.BookDaoImpl; import com.journaldev.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); } }

Advantages of DAO pattern

There are many advantages for using DAO pattern. Let’s state some of them here:

  1. While changing a persistence mechanism, service layer doesn’t even have to know where the data comes from. For example, if you’re thinking of shifting from using MySQL to MongoDB, all changes are needed to be done in the DAO layer only.
  2. DAO pattern emphasis on the low coupling between different components of an application. So, the View layer have no dependency on DAO layer and only Service layer depends on it, even that with the interfaces and not from concrete implementation.
  3. As the persistence logic is completely separate, it is much easier to write Unit tests for individual components. For example, if you’re using JUnit and Mockito for testing frameworks, it will be easy to mock the individual components of your application.
  4. As we work with interfaces in DAO pattern, it also emphasizes the style of “work with interfaces instead of implementation” which is an excellent OOPs style of programming.

DAO Pattern Conclusion

In this article, we learned how we can put DAO design pattern to use to emphasize on keeping persistence logic separate and so, our components loosely coupled.

Design patterns are just based on a way of programming and so, is language and framework independent. Feel free to leave your views in comments below. Download the DAO example project from below link.

Download DAO Pattern Example Project

References: Oracle Documentation, Wikipedia.

WhatsAppRedditTwitterFacebookLinkedinEmail
 Previous
Factory Design Pattern In Scala
Next 
Android MVVM Design Pattern

Filed Under: Design Patterns

« Java StringBuilder
Java Array »

Comments

  1. Hemanth Kumar says

    May 18, 2018 at 7:35 pm

    DAO Design Pattern belongs to which design pattern – Structural or Behavioural DP?

    Reply
  2. arun singh says

    April 6, 2018 at 8:16 am

    thanks

    Reply
  3. C S Chakravarthi says

    April 4, 2018 at 9:36 pm

    Thanks a lot for the explanation

    Reply

Comment Policy:Please submit comments to add value to the post. Comments like "Thank You" and "Awesome Post" will be not published. If you want to post code then wrap them inside <pre> tags. For example <pre>class Foo { }</pre>.
If you want to post XML content, then please escape < with &lt; and > with &gt; otherwise they will not be shown properly.

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages

Design Patterns Tutorial

    Java Design Patterns

    Creational Design Patterns

  • Singleton
  • Factory
  • Abstract Factory
  • Builder
  • Prototype
  • Structural Design Patterns

  • Adapter
  • Composite
  • Proxy
  • Flyweight
  • Facade
  • Bridge
  • Decorator
  • Behavioral Design Patterns

  • Template Method
  • Mediator
  • Chain of Responsibility
  • Observer
  • Strategy
  • Command
  • State
  • Visitor
  • Interpreter
  • Iterator
  • Memento
  • Miscellaneous Design Patterns

  • Dependency Injection
  • Thread Safety in Java Singleton

Recommended Tutorials

Java Tutorials

  • Java IO
  • Java Regular Expressions
  • Multithreading in Java
  • Java Logging
  • Java Annotations
  • Java XML
  • Collections in Java
  • Java Generics
  • Exception Handling in Java
  • Java Reflection
  • Java Design Patterns
  • JDBC Tutorial
  • Java EE Tutorials

  • Servlet JSP Tutorial
  • Struts2 Tutorial
  • Spring Tutorial
  • Hibernate Tutorial
  • Primefaces Tutorial
  • Apache Axis 2
  • JAX-RS
  • Memcached Tutorial

© 2019 · Privacy Policy · Powered by WordPress

Grab your Free Copy of Java Design Patterns eBook (130+ Pages)
x
We promise not to spam you. You can unsubscribe at any time.
Invalid email address
Thanks for subscribing! Please check your email for further instructions.

Don't Miss These Goodies

  • 5 Free eBooks - Design Patterns, Spring and 3 more...
  • Exclusive Subscribers Only Posts and Updates...
  • Interview Tips, Latest Updates and much more...

Invalid email address
We promise not to spam you. You can unsubscribe at any time
Thanks for subscribing! Please check your email for further instructions.
x
Join Our Exclusive Club
5 Free Programming eBooks, Interview Tips, Exclusive Posts and much more...
Invalid email address
We promise not to spam you. You can unsubscribe at any time.
Thanks for subscribing! Please check your email for further instructions.