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 ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问![](1.png) ...
- 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 ...
随机推荐
- webservice wsdl axis2报错 Provider com.bea.xml.stream.MXParserFactory not found
错误信息: Exception in thread "main" javax.xml.stream.FactoryConfigurationError: Provider com. ...
- android开发--数据库(更新或者降低版本)
Andoird的SQLiteOpenHelper类中有一个onUpgrade方法. 1. 帮助文档里说的"数据库升级"是指什么? 你开发了一个应用,当前是1.0版本.该程序用到了数 ...
- <读书笔记>软件调试之道 :问题的核心-重现问题
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记. 重现第一,提问第二 问题重现是实证过程的最强大武器,如果不能重现问题,你也无法证明修复了它 ...
- css3 text-overflow属性
页面: <ul> <li>· 测试测试测试测试测试测试</li> <li>· 测试测试测试测试测试测试</li> <li>· 测 ...
- linux 命令总结
①用find命令查找并删除文件 用脚本创建测试数据: [root@greymouster ceshidata]# for n in `seq 10`> do > date -s " ...
- 返回多个类型的对象,Tuple
一个方法 通常只有一个 返回对象,有时候 我们遇到 要放回两个不同类型的值的时候, 这个时候可以使用Tuple. 对象. Tupele 只支持 .net framework 4.0 以上版本. 来!先 ...
- 机器学习中的算法(1)-决策树模型组合之随机森林与GBDT
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- chroot directory
给 /A/B/C的C目录做chroot,要对C能读写,所以C目录不能做ROOT目录,对B做chroot. 设置C目录所有者为sftp 账户a,组也改为sftp组(这里a和sftp组都是之前建立好的sf ...
- 26 Time Management(转)
01. There is alway time. Time is priorities. 时间常有.时间优先. 02. Days always fill up. 时间总会有的. Only plan f ...
- [ 转 ] scrapy 中解决 xpath 中的中文编码问题
1.问题描述: 实现定位<h2>品牌</h2>节点 brand_tag = sel.xpath("//h2[text()= '品牌']") 报错:Value ...