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..........
}

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

  1. Spring的事务到底该给Dao配置还是给Service配置

    Spring的事务到底该给Dao配置还是给Service配置 Spring事务为业务逻辑进行事务管理,保证业务逻辑上数据的原子性. 事务得根据项目性质来细分:事务可以设置到三个层面(dao层.serv ...

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

    Spring事务为业务逻辑进行事务管理,保证业务逻辑上数据的原子性. 事务得根据项目性质来细分:事务可以设置到三个层面(dao层.service层和web层). 第一:web层事务,这一般是针对那些安 ...

  3. Java学习笔记之使用反射+泛型构建通用DAO

    PS:最近简单的学了学后台Servlet+JSP.也就只能学到这里了.没那么多精力去学SSH了,毕竟Android还有很多东西都没学完.. 学习内容: 1.如何使用反射+泛型构建通用DAO. 1.使用 ...

  4. MyBatis的Dao层注入SqlSession

    有点坑爹,以前没用过Mybatis,最近才用,而且一直用Mybatis推荐的接口映射的方式,但是今天有人告诉我接口方式用得少,大多还是采用从配置文件里面读sql的方式,当然接口也是类似的,都是利用ma ...

  5. Bean实例化(Spring源码阅读)-我们到底能走多远系列(33)

    我们到底能走多远系列(33) 扯淡: 各位:    命运就算颠沛流离   命运就算曲折离奇   命运就算恐吓着你做人没趣味   别流泪 心酸 更不应舍弃   ... 主题: Spring源码阅读还在继 ...

  6. Spring3整合Hibernate4-我们到底能走多远系列(30)

    我们到底能走多远系列(30) 扯淡: 30篇啦!从2012-08-15开始的系列,东平西凑将近一年的时间也就这么几篇.目标的100篇,按这个速度也要再搞两年呢. 发博客果然不是件容易的事,怪不得更多的 ...

  7. java中的vo、dto 、dao

    VO是跟数据库里表的映射,一个表对应一个VO  DAO是用VO来访问真实的表,对数据库的操作都在DAO中完成  BO是业务层,做逻辑处理的 VO , PO , BO , QO, DAO ,POJO  ...

  8. Spring Boot-------JPA——EntityManager构建通用DAO

    EntityManager EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满 ...

  9. java的几种对象(PO,VO,DAO,BO,POJO,DTO)解释

    一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包含任何对数 ...

随机推荐

  1. 20160522--20160526----mybatis入门基础

    一.基础知识: 1.对原生态jdbc程序(单独使用jdbc开发)问题总结  2.mybatis框架原理 (掌握)  3.mybatis入门程序  4.用户的增.删.改.查  5.SqlMapConfi ...

  2. 我的MFC学习之路(一)

    因为项目需求,我开始应用MFC写程序.具体接触MFC的时间大概也有两个月了.现在的水平算是刚刚踏入了MFC大门的半只脚.目前能基本使用MFC Class Wizard,可以根据实例仿照完成需求,小范围 ...

  3. TCP/IP三次握手

    题目: TCP建立连接的过程采用三次握手,已知第三次握手报文的发送序列号为1000,确认序列号为2000,请问第二次握手报文的发送序列号和确认序列号分别为 1999,999 1999,1000 999 ...

  4. c#实现FTP上传

    /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo">需要上传的文件 ...

  5. 转:jQuery对象与dom对象的转换

    jQuery对象与dom对象的转换 发布时间:September 20, 2007 分类:JavaScript <新站上线的手记> <Discuz!多附件上传选择框之jQuery版& ...

  6. [译]当你在浏览器输入url后发生了什么

    面试题会经常问这个,之前也被问过,回答的不是很好,后来看到百度前端的一篇博客,啰嗦了好多,很么触摸屏都上了..后来看到stackoverflow上的一个回答,比较短. 原文地址:http://stac ...

  7. Installation Phases and In-Script Execution for Custom Actions in Windows Installer

    用 InstallShield 依照 Custom Action Wizard 创建 Custom Action 时,会遇到下面的几个选项: In-Script Execution Install U ...

  8. 九度OJ 1513 二进制中1的个数

    题目地址:http://ac.jobdu.com/problem.php?pid=1513 题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 输入: 输入可能包含多个测试样 ...

  9. [java学习笔记]java语言基础概述之标识符&关键字&注释&常量和变量

    一.标识符 在程序中自定义的一些名称 由26个英文字母的大小写,数字,_$组成 定义合法标识符的规则: 不能以数字开头 不能使用关键字 java严格区分大小写 注意:在起名字时,为了提高阅读性,必须得 ...

  10. DataTable 数据量大时,导致内存溢出的解决方案

    /// <summary> /// 分解数据表 /// </summary> /// <param name="originalTab">需要分 ...