A DAO is used to basically write all data access logic. U might be reading the data from a database, flat file or any other source. U'll start with a top level DAO class and a separate DAO for each underlying data storage. The client only needs to know the methods to be invoked to get data and not the underlyisng data storage logic. U can use DAO in conjunction with an BMP entity beans. That way u won't have to make changes in ur bean everytime u want to make changes to ur database calls.