JavaWeb技术(二):DAO设计模式
1. DAO全称:Data Access Object , 数据访问对象。使用DAO设计模式来封装数据持久化层的所有操作(CRUD),使得数据访问逻辑和业务逻辑分离,实现解耦的目的。
2. 典型的DAO实现组件:DAO接口 + DAO接口的实现类
3. 事例代码
1)javabean组件:用于数据传输的对象
/** javabean数据传输对象 */
public class Customer {
// 和数据库中的表是对应的
private int id;
private String name;
private String email;
// 省略getter()/setter()方法
@Override
public String toString() {
return id + ", " + name + ", " + email;
}
}
2)DAO接口
/** DAO接口,用于定义application访问数据库的通用方法 */
public interface CustomerDemo {
// CRUD
public void add(Customer c);
public void update(Customer c);
public void delete(int id);
public Customer getCustomerById(int id);
public List<Customer> queryList();
}
3)DAO接口的实现类
package com.znker.jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
// DAO接口的实现类
public class CustomerDaoImpl implements CustomerDemo {
@Override
public void add(Customer c) {
String sql = "insert into CustomerTb1(name,email) values(?,?)";
// 获得一个数据库连接对象
Connection conn = DBUtil2.open();
try {
// 预定义语句对象
PreparedStatement pstmt = conn.prepareStatement(sql);
// 对占位符进行赋值
pstmt.setString(1, c.getName());
pstmt.setString(2, c.getEmail());
// 执行添加操作
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil2.close(conn);
}
}
@Override
public void update(Customer c) {
String sql = "update CustomerTb1 set name=?, email=? where id=?";
Connection conn = DBUtil2.open();
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(3, c.getId());
pstmt.setString(1, c.getName());
pstmt.setString(2, c.getEmail());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil2.close(conn);
}
}
@Override
public void delete(int id) {
String sql = "delete from CustomerTb1 where id = ?";
Connection conn = DBUtil2.open();
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil2.close(conn);
}
}
@Override
public Customer getCustomerById(int id) {
String sql = "select id, name, email from CustomerTb1 where id = ?";
Connection conn = DBUtil2.open();
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
String name = rs.getString(2);
String email = rs.getString("email");
Customer c = new Customer();
c.setId(id);
c.setName(name);
c.setEmail(email);
return c;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<Customer> queryList() {
String sql = "select id, name, email from CustomerTb1 ";
Connection conn = DBUtil2.open();
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
List<Customer> list = new ArrayList<Customer>();
while (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString(2);
String email = rs.getString("email");
Customer c = new Customer();
c.setId(id);
c.setName(name);
c.setEmail(email);
list.add(c);
}
return list;
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil2.close(conn);
}
return null;
}
}
4)测试代码
import java.util.ArrayList;
import java.util.List;
public class DaoTest {
public static void main(String[] args) {
// DAO接口的实现对象,用户业务层访问数据库
CustomerDemo dao = new CustomerDaoImpl();
// 添加一个用户
Customer c = new Customer();
c.setName("bobo");
c.setEmail("bobo@qq.com");
dao.add(c);
// 查询一个用户List
List<Customer> list = new ArrayList<Customer>();
list = dao.queryList();
System.out.println(list);
}
}
JavaWeb技术(二):DAO设计模式的更多相关文章
- JavaWeb学习笔记——DAO设计模式
- 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用
一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问 ...
- java之 ------ DAO设计模式的【具体解释】及常见设计模式的【应用】
DAO Data Access Object(数据訪问接口) 一.场景和问题 在Java程序中.常常须要把数据持久化,也须要获取持久化的数据.可是在进行数据持久化的过程中面临诸多问题(如:数据源 不同 ...
- 走进JavaWeb技术世界1:JavaWeb的由来和基础知识
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- 对于使用javaweb技术制作简单管理系统的学习
近期在老师的引导下我们学习了利用Javaweb技术制作简单的管理系统,其中涉及到的技术很多,由于大多都是自学 对这些技术的理解还太浅显但能实现一些相关功能的雏形. (一).登录功能 在登陆功能中通过与 ...
- 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 ...
随机推荐
- JS不支持正则中的负向零宽断言
今天在项目中用到了正则表达式,并且需要用负向零宽断言 (?<=exp) 进行筛选,结果运行时报 Invalid group 错,一开始以为是自己很久没用表达式写错了,查阅了一下正则语法后发现并没 ...
- jmeter上传文件搞了一天,才搞定,没高人帮忙效率就是低,赶紧记下来,以备后用
先用谷歌浏览器抓包,抓到的包类似这样: 在jmeter里添加一个http请求,配置好参数,方法,端口,路径等, 勾选 在“同请求一起发送参数”里填写上面抓包的部分数据: 分别对应录入,勾选“编码” 我 ...
- CXF发布webService服务以及客户端调用
这篇随笔内容是CXF发布webService服务以及客户端调用的方法 CXF是什么? 开发工作之前需要下载CXF和安装 下载地址:http://cxf.apache.org 安装过程: <1&g ...
- Sla子分类账表结构
--基础事件关系图Select * From xla_entity_types_vl; --事件实体Select * From xla_entity_id_mappings;--实体ID对应表Sele ...
- php工作笔记4-mysql笔记1
1.Mysql中数值的长度和最大值是没有关系的,它仅仅只代表了数据的宽度,比如:int(4)和int(8)可以存储的数据长度是一样的,她两的大小都是4Byte, 在存储上数据的时候比如Int(4) | ...
- 第六百零七八天 how can I 坚持
昨天去跟着谈了个项目,涨了些见识吧,关注下客户关注的,多考虑些,昨天谈完就下班,陪着sy去了趟西单换电池,苹果的售后也真是挺垃圾的. 今天本来是要搭搭环境的,结果代码没搞来,明天去客户那边搞代码,感觉 ...
- Ubuntu 14.10安装SecureCRT 7.3(转)
原文 :http://blog.csdn.net/chszs/article/details/40623169 1.软件准备 Ubuntu14.04 x64 下载SecureCRT7.3的版本:scr ...
- EUI ToggleButton ToggleSwitch 实现类似音乐开关按钮
一 ToggleButton和ToggleSwitch区别 没区别,就是继承... export class ToggleSwitch extends ToggleButton { /** * @la ...
- css 去除点击之后的虚线
链接在被点击时会出现虚线框,即使松开了也仍然存在,在有的时候显得不美观.既然不好看,那就不要它.怎样去掉呢? 方法一 IE下可使用其私有的html属性:hideFoucs,在标签的结构中加入hidef ...
- c#接口容易被忽视的问题
今天在看"并发集合"的时候,接口IProducerConsumerCollection<T> 有一个方法是TryAdd(),表示"试图"去添加,然后 ...