到底DAO是什么?为什么要有它的存在?

Data Access Object   数据访问接口,就是访问数据库方法的 interface

1. DAO用来封装Data Source的..就比如,Connection conn = DAOFacotry.createConnection()..
就可以把Driver. URL. username, passpword这一些放在DAO
以后要更改数据库的类型.比如要把MSSQL换成Oracle的话..只需要更改DAOFacory里面的createConnection()里面的Driver.URL.之类的..
2. DAO也是把对数据库的操作(比如最基本的CRUD操作)全部封装在里面..
比如你要你要插入一个新的用户..那么.在DAO中我们只需要提供一个insertUser(User user)这一个方法就可以了..具体的操作DAO中实现的...
那么对于要调用DAO的时候.我们只要知道insertUser(User)用来插入一个新的用户...而不需要知道如何实现的..

下面form的三个字段(也就是用户要输三个注册信息)
firstname
lastname
password
分别对应数据库中的三个字段:
firstname
lastname
password:password

当用用户提交了一个注册Form后我就得到了一个fromBean,在完成了对这个formBean的验证(validate)之后我的我的控制转到Action的execute(),到了这里我有两个选择:
*****************************************************************
1:当有没有用到DAO时我会直接在execute()中完成这个formBean对数据库的提交下面我的伪码:
     Sesseion session=.....;
     session.save(formBean);
*****************************************************************
2:当有用到DAO不是下面这样呢(我自己想的错了不要打我)
  a: 先定义一个DAO
       Public class UserDao{
              private Static Session sessioon=......;(定义一个静态的hibernate session 并initialize)
              private String firstName;
              private String lastName;
              private String password;
              public UserDao(String firstName,String lastName,String password){
                        this.firstName=firstName;
                        this.lastName=lastName;
                        this.password=password;
               }
               public UserDao(UserFormBean useBean){
                       this.firstName=useBean.firstName;
                         ...
                        ....
              }
              public void delUser(){
                    session.delete(this);
                    session.close();
              }
              public void addUser( ){
                     session.saveorUpdate(this);
                     session.close();
               }
               .....
               ...
     }
  b:在Action中的execute()
     UserDao useDao=new UserDao(userFormBean);
     useDao.save()
DAO一般是跟Factory和Abstract模式一起用的..
Factory来建立数据库和定位具体的DAO(比如UserDao..CustomerDao..)..

Abstract用来定义接口方法的比较:
public interface UserDao {
  public insertUser(FormBean) ;
  public updateUser(FormBean);
}
然后就实现DAO的接口:
public class UserDaoImpl implements UserDao {
  public insertUser(FormBean) { 
  ..//..
  session.save(UserPO);
  ..//..
  return FormBean;
  }
  public FormBean updateUser(FormBean) {
    ..//..
   session.update(UserPO);
    ..//..
  return FormBean;
  }
}
最后定义你的PO:
public class UserPO {
String firstname, lastname, password..........
}

时间: 2024-10-10 13:57:15

到底DAO是什么?为什么要有它的存在?的相关文章

spring事务到底用于service层还是dao层

Spring事务为业务逻辑进行事务管理,保证业务逻辑上数据的原子性. 事务得根据项目性质来细分:事务可以设置到三个层面(dao层.service层和web层). 第一:web层事务,这一般是针对那些安全性要求较高的系统来说的.例如电子商务网站.粒度小,一般系统用不着这么细. 第二:service层事务,这是一常见的事务划分, 将事务设置在业务逻辑上,只要业务逻辑出错或异常就事务回滚.粒度较小,一般推荐这种方式. 第三:数据持久层数据务,也就是常说的数据库事务.这种事务在安全性方面要求低.就是给一

JAVA DAO(Data Access Object)的个人总结

最近上课,老师提到DAO,也是因为后面做作业的需要,就花了一点时间,来看一下DAO,也只是泛泛而谈,自己学习的一些总结,也希望给想学习的新手一些帮助吧. 1.什么是DAO 说来说去,DAO到底是什么呢?神神秘秘的,让我们来一层层的解开她的面纱.在核心J2EE模式中是这样介绍的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共的API当中.用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事物方法.在这个应用程序中,当需要和数据源进行交互的

java设计模式(2)------DAO模式

java设计模式(2) 一.DAO模式 1.在java程序中,经常需要把数据永久化,或者需要获取永久化的数据,但是在这类过程中会有很多的问题出现,例如:数据源不同,存储类型不同,供应商不同.访问方式不同等,使用DAO模式能够以统一的接口进行数据持久化操. 2.解决方案: 3.DAO的理解 ①.DAO其实是利用组合工厂模式来解决问题的,并没有带来新的功能,所以学的其实就是个思路. ②.DAO理论上是没有层数限制的. ③.DAO的各层理论上是没有先后的. 4.DAO模式的本质是一层屏蔽一种变化.  

MyBatis的Dao层注入SqlSession

有点坑爹,以前没用过Mybatis,最近才用,而且一直用Mybatis推荐的接口映射的方式,但是今天有人告诉我接口方式用得少,大多还是采用从配置文件里面读sql的方式,当然接口也是类似的,都是利用mapper.xml. 于是就想把这东西整合进来,当进行dao的时候发现一个小问题,sqlSession怎么注入进来的问题,以前Hibernate的的习惯用sessionFactory的openSession()方法,但是每个方法都要open一下,麻烦,就想能不能直接把sqlSession通过注解注入进

SSH框架整合中Hibernate实现Dao层常用结构

一.疑惑 一直以来,我在使用SSH框架的时候经常会发现后者有疑虑到底使用hibernate的那种方法或者如何配置hibernate来操作数据库,经过 一段时间的学习下面我来总结一下,常用的dao层配置. 二.常用的hibernate操作dao  第一种,通过继承HibernateDaoSupport来操作 第二种,通过HibernateTemplate来操作 第三种,通过使用Hibernate的session来操作 第四种,直接写JDBC来实现数据库操作 三.四种常用方法介绍及配置 通过继承Hi

【一起学设计模式】中介者模式+观察者模式+备忘录模式实战:(二)提交个订单我到底经历了什么鬼?

前言 再多的话就不说了,这个是接着上一讲: [一起学设计模式]状态模式+装饰器模式+简单工厂模式实战:(一)提交个订单我到底经历了什么鬼? 一起的,一些多余的赘述请先看这个篇文章. 业务场景 一图流,还是上一篇文章中一样的图,接下来我们就梳理下总结模式.观察者模式.备忘录模式的应用: 订单中心: 1.订单中心创建订单 2.订单状态流转(状态模式) 3.记录操作日志(装饰器模式+简单工厂模式) 4.订单中心通知 库存中心更新库存 调度中心: 1.库存中心更新本地库存(使用命令模式+模板方法模式+工

mybatis和Dao映射的配置文件xml,中什么时候需要用resultType .什么时候用resultMap,及resultType和resultMap的区别

区别: 两者都可以用于映射文件中的<select>语句的返回值,但是两者在返回值上面是有区别的 如下面的两个例子: 使用resultType的 举个例子吧,例子以ibatis为例: 你有个User 对象, 拥有两个字段id,name. 1.你要获取id为123的name String name = (String) queryForObject("getUserNameByID", id); <select id="getUserNameByID"

实际开发中 dao、entity的代码怎样自动生成?一款工具送给你

01 关注"一猿小讲"朋友,都知道以往的文章一直倡导拒绝 CRUD,那到底什么是 CRUD?今天咱们就聊聊 Java 妹子小猿与数据库老头交互的事儿. 产品小汪铿锵有力的说:小猿同学,咱们近期要推一爆款产品,你先实现用户基本的登录的功能. 啥玩意?小猿内心嘀咕嘀咕:爆款产品,还基本的登录,那不就是实现用户的 CRUD(增删改查)么? 小汪一句话,累死三军.扯皮一上午的会议终于结束了,于是小猿便叫了个外卖,填补了肚子的空虚后,小猿习惯性的在脑海里,开始了爆款产品的从 0 到 1 的脑图搭

使用MyBatis Generator自动生成实体、mapper和dao层

通过MyBatis Generator可以自动生成实体.mapper和dao层,记录一下怎么用的. 主要步骤: 关于mybatis从数据库反向生成实体.DAO.mapper: 参考文章:http://www.cnblogs.com/wangkeai/p/6934683.html第一种方式:main方法运行(推荐) 1.在pom.xml中加入插件依赖: 2.写mbgConfiguration.xml文件,jdbc.properties文件 3.写/SSM/src/main/java/main/Ge