到底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..........
}
到底DAO是什么?为什么要有它的存在?的更多相关文章
- Spring的事务到底该给Dao配置还是给Service配置
Spring的事务到底该给Dao配置还是给Service配置 Spring事务为业务逻辑进行事务管理,保证业务逻辑上数据的原子性. 事务得根据项目性质来细分:事务可以设置到三个层面(dao层.serv ...
- spring事务到底用于service层还是dao层
Spring事务为业务逻辑进行事务管理,保证业务逻辑上数据的原子性. 事务得根据项目性质来细分:事务可以设置到三个层面(dao层.service层和web层). 第一:web层事务,这一般是针对那些安 ...
- Java学习笔记之使用反射+泛型构建通用DAO
PS:最近简单的学了学后台Servlet+JSP.也就只能学到这里了.没那么多精力去学SSH了,毕竟Android还有很多东西都没学完.. 学习内容: 1.如何使用反射+泛型构建通用DAO. 1.使用 ...
- MyBatis的Dao层注入SqlSession
有点坑爹,以前没用过Mybatis,最近才用,而且一直用Mybatis推荐的接口映射的方式,但是今天有人告诉我接口方式用得少,大多还是采用从配置文件里面读sql的方式,当然接口也是类似的,都是利用ma ...
- Bean实例化(Spring源码阅读)-我们到底能走多远系列(33)
我们到底能走多远系列(33) 扯淡: 各位: 命运就算颠沛流离 命运就算曲折离奇 命运就算恐吓着你做人没趣味 别流泪 心酸 更不应舍弃 ... 主题: Spring源码阅读还在继 ...
- Spring3整合Hibernate4-我们到底能走多远系列(30)
我们到底能走多远系列(30) 扯淡: 30篇啦!从2012-08-15开始的系列,东平西凑将近一年的时间也就这么几篇.目标的100篇,按这个速度也要再搞两年呢. 发博客果然不是件容易的事,怪不得更多的 ...
- java中的vo、dto 、dao
VO是跟数据库里表的映射,一个表对应一个VO DAO是用VO来访问真实的表,对数据库的操作都在DAO中完成 BO是业务层,做逻辑处理的 VO , PO , BO , QO, DAO ,POJO ...
- Spring Boot-------JPA——EntityManager构建通用DAO
EntityManager EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满 ...
- java的几种对象(PO,VO,DAO,BO,POJO,DTO)解释
一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包含任何对数 ...
随机推荐
- client 如何找到正确的RegionServer(HBase -ROOT-和.META.表)
在HBase中,大部分的操作都是在RegionServer完成的,Client端想要插入,删除,查询数据都需要先找到相应的RegionServer.什么叫相应的RegionServer?就是管理你要操 ...
- SQL Server2008数据库如何改名
未使用的数据库改名比较方便,找到你要更改的数据库,右键选择[重命名]. 2 然后将你想要更改的名字写好,然后点击一下旁边的空白栏. 3 然后你就发现数据库的名称已经改好了. END 使用中的数据库 ...
- JavaScript高级程序设计(六):关键字 void 和 delete 使用
一.void 1.概述:JavaScript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值. 2.语法:JavaScript void (express) 或则 JavaScri ...
- Objective-C 【类对象及SEL存储方式】
------------------------------------------- 类的本质--类对象 一段代码: #import <Foundation/Foundation.h> ...
- 【转】querystring传递中文出现乱码的问题
原帖地址:http://www.cnblogs.com/Fly-sky/archive/2009/04/22/1441015.html 现象:近期项目中用到查询字符串传值,如果传递的是英文一切正常,但 ...
- IO流04_InputStream和Reader输入流
[输入流中的字符流和字节流] [InputStream和Reader] InputStream和Reader是所有输入流的抽象基类,本身不能实例化,但是他们是所有输入流的模板. [ InputStre ...
- 深度模拟java动态代理实现机制系类之一
上一篇博客是最基本的动态代理原理的实现,因为其固定了接口,固定了代理方法,以及固定了代理的类型,接下来的博客系类将一步步渐入深度介绍java的动态代理的实现原理 ******************* ...
- yii2 用gii生成后台模块 view path描述
view path 格式: @backend/views/refund , 注意@和/
- C# 制作Zip压缩包
压缩包制作也是很多项目中需要用到的功能.比如有大量的文件(假设有10000个)需要上传,1个1个的上传似乎不太靠谱(靠,那得传到什么时候啊?),这时我们可以制作一个压缩包zip,直接传这个文件到服务器 ...
- Entity Framework 插入数据 解决主键非自增问题
http://blog.csdn.net/educast/article/details/8632806 与Entity Framework相伴的日子痛并快乐着.今天和大家分享一下一个快乐,两个痛苦. ...