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

2. 典型的DAO实现组件:DAO接口 + DAO接口的实现类

3. 事例代码

  1)javabean组件:用于数据传输的对象

  1. /** javabean数据传输对象 */
  2. public class Customer {
  3. // 和数据库中的表是对应的
  4. private int id;
  5. private String name;
  6. private String email;
  7.  
  8. // 省略getter()/setter()方法
  9.  
  10. @Override
  11. public String toString() {
  12. return id + ", " + name + ", " + email;
  13. }
  14. }

  2)DAO接口

  1. /** DAO接口,用于定义application访问数据库的通用方法 */
  2. public interface CustomerDemo {
  3. // CRUD
  4. public void add(Customer c);
  5. public void update(Customer c);
  6. public void delete(int id);
  7. public Customer getCustomerById(int id);
  8. public List<Customer> queryList();
  9.  
  10. }

  3)DAO接口的实现类

  1. package com.znker.jdbc;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.sql.Statement;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10.  
  11. // DAO接口的实现类
  12.  
  13. public class CustomerDaoImpl implements CustomerDemo {
  14.  
  15. @Override
  16. public void add(Customer c) {
  17. String sql = "insert into CustomerTb1(name,email) values(?,?)";
  18. // 获得一个数据库连接对象
  19. Connection conn = DBUtil2.open();
  20.  
  21. try {
  22. // 预定义语句对象
  23. PreparedStatement pstmt = conn.prepareStatement(sql);
  24. // 对占位符进行赋值
  25. pstmt.setString(1, c.getName());
  26. pstmt.setString(2, c.getEmail());
  27. // 执行添加操作
  28. pstmt.executeUpdate();
  29.  
  30. } catch (SQLException e) {
  31. e.printStackTrace();
  32. } finally {
  33. DBUtil2.close(conn);
  34. }
  35. }
  36.  
  37. @Override
  38. public void update(Customer c) {
  39. String sql = "update CustomerTb1 set name=?, email=? where id=?";
  40. Connection conn = DBUtil2.open();
  41.  
  42. try {
  43. PreparedStatement pstmt = conn.prepareStatement(sql);
  44. pstmt.setInt(3, c.getId());
  45. pstmt.setString(1, c.getName());
  46. pstmt.setString(2, c.getEmail());
  47.  
  48. pstmt.executeUpdate();
  49.  
  50. } catch (SQLException e) {
  51. e.printStackTrace();
  52. } finally {
  53. DBUtil2.close(conn);
  54. }
  55. }
  56.  
  57. @Override
  58. public void delete(int id) {
  59. String sql = "delete from CustomerTb1 where id = ?";
  60. Connection conn = DBUtil2.open();
  61.  
  62. try {
  63. PreparedStatement pstmt = conn.prepareStatement(sql);
  64. pstmt.setInt(1, id);
  65.  
  66. pstmt.executeUpdate();
  67.  
  68. } catch (SQLException e) {
  69. e.printStackTrace();
  70. } finally {
  71. DBUtil2.close(conn);
  72. }
  73. }
  74.  
  75. @Override
  76. public Customer getCustomerById(int id) {
  77. String sql = "select id, name, email from CustomerTb1 where id = ?";
  78. Connection conn = DBUtil2.open();
  79.  
  80. try {
  81. PreparedStatement pstmt = conn.prepareStatement(sql);
  82. pstmt.setInt(1, id);
  83.  
  84. ResultSet rs = pstmt.executeQuery();
  85.  
  86. if (rs.next()) {
  87. String name = rs.getString(2);
  88. String email = rs.getString("email");
  89.  
  90. Customer c = new Customer();
  91. c.setId(id);
  92. c.setName(name);
  93. c.setEmail(email);
  94.  
  95. return c;
  96. }
  97. } catch (SQLException e) {
  98. e.printStackTrace();
  99. }
  100.  
  101. return null;
  102. }
  103.  
  104. @Override
  105. public List<Customer> queryList() {
  106. String sql = "select id, name, email from CustomerTb1 ";
  107. Connection conn = DBUtil2.open();
  108.  
  109. try {
  110. Statement stmt = conn.createStatement();
  111. ResultSet rs = stmt.executeQuery(sql);
  112. List<Customer> list = new ArrayList<Customer>();
  113.  
  114. while (rs.next()) {
  115. int id = rs.getInt(1);
  116. String name = rs.getString(2);
  117. String email = rs.getString("email");
  118.  
  119. Customer c = new Customer();
  120. c.setId(id);
  121. c.setName(name);
  122. c.setEmail(email);
  123.  
  124. list.add(c);
  125. }
  126.  
  127. return list;
  128. } catch (SQLException e) {
  129. e.printStackTrace();
  130. } finally {
  131. DBUtil2.close(conn);
  132. }
  133.  
  134. return null;
  135. }
  136.  
  137. }

  4)测试代码

  1. import java.util.ArrayList;
  2. import java.util.List;
  3.  
  4. public class DaoTest {
  5.  
  6. public static void main(String[] args) {
  7.  
  8. // DAO接口的实现对象,用户业务层访问数据库
  9. CustomerDemo dao = new CustomerDaoImpl();
  10.  
  11. // 添加一个用户
  12. Customer c = new Customer();
  13. c.setName("bobo");
  14. c.setEmail("bobo@qq.com");
  15. dao.add(c);
  16.  
  17. // 查询一个用户List
  18. List<Customer> list = new ArrayList<Customer>();
  19. list = dao.queryList();
  20. System.out.println(list);
  21.  
  22. }
  23. }

JavaWeb技术(二):DAO设计模式的更多相关文章

  1. JavaWeb学习笔记——DAO设计模式

  2. 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用

    一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问![](1.png) ...

  3. java之 ------ DAO设计模式的【具体解释】及常见设计模式的【应用】

    DAO Data Access Object(数据訪问接口) 一.场景和问题 在Java程序中.常常须要把数据持久化,也须要获取持久化的数据.可是在进行数据持久化的过程中面临诸多问题(如:数据源 不同 ...

  4. 走进JavaWeb技术世界1:JavaWeb的由来和基础知识

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  5. 对于使用javaweb技术制作简单管理系统的学习

    近期在老师的引导下我们学习了利用Javaweb技术制作简单的管理系统,其中涉及到的技术很多,由于大多都是自学 对这些技术的理解还太浅显但能实现一些相关功能的雏形. (一).登录功能 在登陆功能中通过与 ...

  6. Java Dao设计模式

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

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

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

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

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

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

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

随机推荐

  1. 新手上路,配置阿里云CentOS服务器LAMP

    最近出了个9.9包月的阿里云一直想弄就买了个半年的,脑子一热选了个CentOS系统的然后就是无尽的代码...... 话不多说直接上步骤:  在实例中选择"连接管理终端",输入一些应 ...

  2. Hibernate注解使用以及Spring整合

    Hibernate注解使用以及Spring整合 原文转自:http://wanqiufeng.blog.51cto.com/409430/484739 (1) 简介: 在过去几年里,Hibernate ...

  3. SSH Tunneling

    把本地端口 local_port 转发到服务器 server2 的 remote_port 端口上, server1 和 server2可以是同一ip或者不同ip. ssh user@server1 ...

  4. java线程内存模型,线程、工作内存、主内存

    转自:http://rainyear.iteye.com/blog/1734311 java线程内存模型 线程.工作内存.主内存三者之间的交互关系图: key edeas 所有线程共享主内存 每个线程 ...

  5. 移动端rem页面详谈

    rem布局是移动端常见的布局之一,也是较为成熟的方案.接下来就详细说以下rem布局的实际操作. 1.首先加<meta />标签,设置视口的大小,不多说. <meta name=&qu ...

  6. tomcat gzip compression not working for large js files

    solution 1: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout=&quo ...

  7. dynamic 的使用 待续

    Dynamic 使用场景之一 : 替代反射 class Me { public string Blog { get; set; } public string GetName() { return&q ...

  8. nginx修改配置后不生效的问题

    nginx增加了新的server name配置,发现nginx -s reload之后总是不生效. http和https均可以打开页面,但是页面是别的server页面,使用的证书也是别的server的 ...

  9. iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group

    同步,指代码在同一个线程运行 异步,代码在另一个线程运行 串行队列,提交到该队列的block会顺序执行 并行队列,提交到该队列的block会并发执行 如果想等某一队列中所有block都执行完了在执行一 ...

  10. 使用Axis2实现WebService的发布和调用

    一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本:      可以下载如下三个zip包: axis2-1.7.3-bin.zip(用 ...