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

  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. iOS学习之代码块(Block)

    代码块(Block) (1)主要作用:将一段代码保存起来,在需要的地方调用即可. (2)全局变量在代码块中的使用: 全局变量可以在代码块中使用,同时也可以被改变,代码片段如下: ;//注意:全局变量 ...

  2. .NET Framework 的 Quirk Version

    今天在CSDN上看到一个帖子 :".net 4.0和4.5不同版本的Uri.ToString行为不同?", 调试.NET Framework 源代码发现,是这句代码起的作用 int ...

  3. oracle中字符串连接用||

    oracle中字符串连接用|| create or replace procedure testIf(idid number) is v_name stu.name%type; v_age stu.a ...

  4. 这几天帮一个朋友解决了一点小问题(RF的有些小问题及解决过程)

    最近涉猎自动化太少了,以至于都不经常更新了.最近一个朋友在做移动端自动化的时候遇到了一些小问题来找我解决.本人也不是很精通,只是接触的时间长了一点了.下面就是一些问题和解决过程: 1.她刚过来的时候, ...

  5. IT界里的生日

    MS-DOS    1981年7月27日 windows 3.0  1990年5月22日 windows 3.11  1992年3月18日 Windows 95  1995年8月24日 Windows ...

  6. hive中拉链表

    在有些情况下,为了保持历史的一些状态,需要用拉链表来做,这样做目的在可以保留所有状态的情况下可以节省空间. 拉链表适用于以下几种情况吧 数据量有点大,表中某些字段有变化,但是呢变化的频率也不是很高,业 ...

  7. Nginx内置变量以及日志格式变量参数详解

    $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为 ...

  8. javascript验证香港身份证

    var assert = require('assert'); describe('test', function() { it('coc', function() { var testCard01 ...

  9. Google V8编程详解(序)Cloud App

    此系列文章转载于此http://blog.csdn.net/feiyinzilgd/article/details/8247723          应用程序发展到今天,应用程序的概念也在不断地发生着 ...

  10. C#中一种可调用的异常处理方法

    之前做异常处理时,感觉很麻烦,每个地方都要写try和catch,在博客园上看到一篇文章http://www.cnblogs.com/artech/archive/2012/10/28/automati ...