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设计模式的更多相关文章

  1. JavaWeb技术(二):DAO设计模式

    1. DAO全称:Data Access Object , 数据访问对象.使用DAO设计模式来封装数据持久化层的所有操作(CRUD),使得数据访问逻辑和业务逻辑分离,实现解耦的目的. 2. 典型的DA ...

  2. Java Dao设计模式

    一.信息系统的开发架构   客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/S ...

  3. MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. DAO设计模式 -- 使用数据库连接类连接MySql数据库并实现添加用户

    1. DAO简介    DAO设计模式是属于J2EE数据库层的操作,使用DAO设计模式可以简化大量代码,增强程序的可移植性. 2. DAO各部分详解    DAO设计模式包括5个重要的部分,分别为数据 ...

  5. JavaBean中DAO设计模式介绍(转)

    一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/Ser ...

  6. jsp DAO设计模式

    DAO(Data Access Objects)设计模式是属于J2EE体系架构中的数据层的操作. 一.为什么要用DAO? 比较在JSP页面中使用JDBC来连接数据库,这样导致了JSP页面中包含了大量的 ...

  7. 简单的Dao设计模式

    简单的DAO设计模式 这两天学习到了DAO(Data Access Object 数据存取对象)设计模式.想谈谈自己的感受,刚开始接触是感觉有点难,觉得自己逻辑理不清,主要是以前学的知识比较零散没有很 ...

  8. Java学习之DAO设计模式

    DAO设计模式是一个javaEE里的设计模式,DAO是Data Access Object 数据访问接口. 一个典型的DAO实现有三个组件: 1.一个DAO接口 2.一个DAO接口的具体类: 3.数据 ...

  9. JavaBean在DAO设计模式简介

    一.信息系统开发框架 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层是client,简单的来说就是浏览器. 2.显示层:JSP/Se ...

随机推荐

  1. Angular2学习笔记——路由器模型(Router)

    Angular2以组件化的视角来看待web应用,使用Angular2开发的web应用,就是一棵组件树.组件大致分为两类:一类是如list.table这种通放之四海而皆准的通用组件,一类是专为业务开发的 ...

  2. C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁

    系列文章 C#开发奇技淫巧一:调试windows系统服务 C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件 C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁 程序目录的整理 ...

  3. jQuery 插件-(初体验一)

    1.jquery有2个扩展方法: jquery.fn.extend=jquery.prototype.extend jquery.extend (两者的区别放在后面文章说) 2.具体实例结构: //创 ...

  4. 前端学HTTP之连接管理

    前面的话 HTTP连接是HTTP报文传输的关键通道.要掌握HTTP就需要理解HTTP连接的来龙去脉以及如何使用这些连接 如果想查看一个网页,浏览器收到URL时,会执行下图所示的步骤.将服务器的IP地址 ...

  5. 计算机程序的思维逻辑 (43) - 剖析TreeMap

    40节介绍了HashMap,我们提到,HashMap有一个重要局限,键值对之间没有特定的顺序,我们还提到,Map接口有另一个重要的实现类TreeMap,在TreeMap中,键值对之间按键有序,Tree ...

  6. 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之序列化

    一个技术汪的开源梦 —— 目录 想必大家在项目中都接触过 JSON 或者 XML 吧,为了将对象在网络上传输或者将其持久化必须将其序列化为一个字符串然后进行后续操作.常见的就是将其序列化成 JSON ...

  7. Hadoop的学习--安装配置与使用

    安装配置 系统:Ubuntu14.04 java:1.7.0_75 相关资料 官网 下载地址 官网文档 安装 我们需要关闭掉防火墙,命令如下: sudo ufw disable 下载2.6.5的版本, ...

  8. Moon.Orm 配置说明

    一.在线技术文档: http://files.cnblogs.com/files/humble/d.pdf   二.使用的大致流程   1.首先下载代码生成器,可以一键生成项目Model层;(其中含有 ...

  9. Basic Tutorials of Redis(5) - Sorted Set

    The last post is mainly about the unsorted set,in this post I will show you the sorted set playing a ...

  10. .Net Html如何上传图片到一般应用程序

    用html实现图片上传 后台采用.net其中在这里要借用一个js插件 在这里我会写一个图片上传的一个小Demo,有不全的地方多多包容,和提议, 我把已经写好的demo已经上传到百度云 在这里可以下载 ...