DAO设计模式
DAO设计模式
DAO设计模式简介: DAO设计模式可以减少代码量,增强程序的可移植性,提高代码的可读性。
DAO(数据库操作对象)设计模式是 JavaEE 数据层的操作.主要由五部分组成:
1.数据库连接类:连接数据库并获取连接对象。
2.VO实体类:包含属性和表中字段完全对应的类。
3.DAO接口:提供了用户所有的操作方法(就如老师给学生提供一些学习方法)。
4.DAO实现类:实现DAO中所有的方法(就如老师给提供的方法看你如何去完成)。
5.DAO工厂类:为程序提供方法,如果要替换DAO实现类,只需要修改该Dao工厂类中的方法代码,
而不必邀修改所有的操作数据库代码(如代理人专门为需要的公司提供人才,也叫做服务层)。
下面以一个用户登录为例:
1.数据库建表:

2.数据库连接类 com.util(记得导入c3p0框架包)
package com.util; import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0Util {
// C3P0数据源
private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); public static DataSource getDataSource() {
return dataSource;
} public static Connection getConn() {
Connection conne = null;
try {
conne = dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return conne;
} // 关闭资源
public static void closeAll(ResultSet rs, Statement st, Connection conne) {
try {
if (null != rs) {
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (null != st) {
st.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (conne != null) {
conne.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.VO实体类 com.entity
package com.entity;
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
4.DAO接口类 com.dao
package com.dao;
import com.entity.Person;
public interface PersonDao {
//根据对象查询
public Person findMaster(Person person);
}
5.DAO实现类 com.daoImpl
package com.daoImpl; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import com.dao.PersonDao;
import com.entity.Person;
import com.util.C3P0Util; public class PersonDaoImpl implements PersonDao { @Override
public Person findMaster(Person person) {
Connection conne = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
Person person2 = null;
String sql = "SELECT * FROM person WHERE name = ? AND password = ?"; try {
conne = C3P0Util.getConn(); // 建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句。
pstmt = conne.prepareStatement(sql);
pstmt.setString(1, person.getName());
pstmt.setString(2, person.getPassword());
rs = pstmt.executeQuery(); if (rs.next()) {
person2 = new Person();
person2.setId(rs.getInt("id"));
person2.setName(rs.getString("name"));
person2.setPassword(rs.getString("password"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
C3P0Util.closeAll(rs, pstmt, conne);
}
return person2;
} }
6.DAO工厂接口 com.service
package com.service;
import com.entity.Person;
public interface PersonService {
public boolean login (Person person);
}
7.DAO工厂实现类 com.serviceImpl
package com.serviceImpl; import com.dao.PersonDao;
import com.daoImpl.PersonDaoImpl;
import com.entity.Person;
import com.service.PersonService; public class PersonServiceImpl implements PersonService { @Override
public boolean login(Person person) {
boolean islogin = false;
PersonDao pd = new PersonDaoImpl();
Person ps2 = pd.findMaster(person);
if (null != ps2) {
islogin = true;
}
return islogin;
}
}
8.测试
package com.test; import java.util.Scanner; import org.junit.Test; import com.entity.Person;
import com.service.PersonService;
import com.serviceImpl.PersonServiceImpl; public class LoginTest {
@Test
public void loginTest() {
Scanner sc = new Scanner(System.in, "UTF-8");
System.out.println("请输入用户名");
String loginName = sc.next();
System.out.println("请输入密码");
String loginPassword = sc.next(); Person person = new Person();
person.setName(loginName);
person.setPassword(loginPassword); PersonService ps = new PersonServiceImpl();
boolean isLoginid = ps.login(person); if (isLoginid) {
System.out.println("登录成功");
} else {
System.out.println("用户名或密码错误");
}
}
}
运行结果如下:

DAO设计模式的更多相关文章
- JavaWeb技术(二):DAO设计模式
1. DAO全称:Data Access Object , 数据访问对象.使用DAO设计模式来封装数据持久化层的所有操作(CRUD),使得数据访问逻辑和业务逻辑分离,实现解耦的目的. 2. 典型的DA ...
- Java Dao设计模式
一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/S ...
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- DAO设计模式 -- 使用数据库连接类连接MySql数据库并实现添加用户
1. DAO简介 DAO设计模式是属于J2EE数据库层的操作,使用DAO设计模式可以简化大量代码,增强程序的可移植性. 2. DAO各部分详解 DAO设计模式包括5个重要的部分,分别为数据 ...
- JavaBean中DAO设计模式介绍(转)
一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/Ser ...
- jsp DAO设计模式
DAO(Data Access Objects)设计模式是属于J2EE体系架构中的数据层的操作. 一.为什么要用DAO? 比较在JSP页面中使用JDBC来连接数据库,这样导致了JSP页面中包含了大量的 ...
- 简单的Dao设计模式
简单的DAO设计模式 这两天学习到了DAO(Data Access Object 数据存取对象)设计模式.想谈谈自己的感受,刚开始接触是感觉有点难,觉得自己逻辑理不清,主要是以前学的知识比较零散没有很 ...
- Java学习之DAO设计模式
DAO设计模式是一个javaEE里的设计模式,DAO是Data Access Object 数据访问接口. 一个典型的DAO实现有三个组件: 1.一个DAO接口 2.一个DAO接口的具体类: 3.数据 ...
- JavaBean在DAO设计模式简介
一.信息系统开发框架 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层是client,简单的来说就是浏览器. 2.显示层:JSP/Se ...
随机推荐
- 开源一个WEB版本GEF,基于SVG的网页流程图框架
8月开始断断续续的制作这个web gef,没有任何依赖,完全原生js开发,目前已经完成了雏形,基本上可以在项目里应用了. 下图展示的是demo1的效果,包括拖拽,生成连线,点击生成\取消墙体,整个de ...
- 博客已经迁移至 http://barretlee.com/entry/,时而同步分享到这里
博客园是一个十分好的写作平台,不过个人比较喜欢倒腾,所以将文章都做了搬迁. 博客已经迁移至 http://barretlee.com/entry/,感谢一直以来的关注和支持. 博客订阅地址: http ...
- 升讯威ADO.NET增强组件(源码):送给喜欢原生ADO.NET的你
目前我们所接触到的许多项目开发,大多数都应用了 ORM 技术来实现与数据库的交互,ORM 虽然有诸多好处,但是在实际工作中,特别是在大型项目开发中,容易发现 ORM 存在一些缺点,在复杂场景下,反而容 ...
- jquery ajax解析
jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对 ...
- GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断
多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程 ...
- SQL Server 监控系列(文章索引)
一.前言(Introduction) SQL Server监控在很多时候可以帮助我们了解数据库做了些什么,比如谁谁在什么时候修改了表结构,谁谁在删除了某个对象,当这些事情发生了,老板在后面追着说这是谁 ...
- Livecoding.tv 现正举行iOS及Android App设计比赛
近日,Livecoding.tv, 一个为世界各地的程序员提供在线实时交流的平台,在其网站上发布了一篇通知, 宣布从4月15日至5月15日,会为iOS和Android的开发者举办一场本地移动app设计 ...
- 8.SVM用于多分类
从前面SVM学习中可以看出来,SVM是一种典型的两类分类器.而现实中要解决的问题,往往是多类的问题.如何由两类分类器得到多类分类器,就是一个值得研究的问题. 以文本分类为例,现成的方法有很多,其中一劳 ...
- 1. SVM简介
从这一部分开始,将陆续介绍SVM的相关知识,主要是整理以前学习的一些笔记内容,梳理思路,形成一套SVM的学习体系. 支持向量机(Support Vector Machine)是Cortes和Vapni ...
- Kafka 文档用例
1.2 用例 以下是一些Kafka 常见的用例.关于功能方面的一些概念,可以看这篇博客:http://engineering.linkedin.com/distributed-systems/log- ...