博客
关于我
JDBC DAO模式笔记
阅读量:341 次
发布时间:2019-03-04

本文共 5446 字,大约阅读时间需要 18 分钟。

DAO的全称是Data Access Object,旨在将对数据库的操作进行封装,使开发人员可以通过调用简单的方法与数据库进行交互,而无需直接处理连接或事务管理。

DAO的组成部分

  • VO类

    VO(Value Object)类用于与数据表单中的字段一一对应,通常包含与数据库表字段相同的属性,并提供相应的 setter 和 getter 方法来进行数据的获取和设置。该类主要用于数据传输和展示。

  • 数据库连接类(DBUtil类)

    DBUtil类负责管理数据库连接和关闭操作。它通常包含静态方法,用于获取数据库配置信息(如驱动类、连接URL、用户名和密码),以及打开和关闭数据库连接的功能。

  • DAO接口

    DAO接口定义了与数据库进行操作的通用方法,通常包括增、删、改、查等基本操作。每个方法的具体实现由对应的实现类负责。

  • DAO实现类

    DAO实现类对接口中的方法进行具体实现,负责与数据库进行数据的增、删、改、查操作。例如,插入数据时,实现类会调用PreparedStatement执行SQL语句,并处理可能的异常。

  • 示例

    假设数据表包含ID、NAME、AGE三个字段,常见的VO类如下:

    public class Customer {    private int id;    private String name;    private int age;    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 int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public String toString() {        return "id:" + id + " name:" + name + " age:" + age;    }}

    数据库连接类DBUtil的实现如下:

    public class DBUtil {    private static String driver;    private static String url;    private static String username;    private static String password;    static {        Properties prop = new Properties();        try {            Reader in = new FileReader("src/config.properties");            prop.load(in);        } catch (Exception e) {            e.printStackTrace();        }        driver = prop.getProperty("driver");        url = prop.getProperty("url");        username = prop.getProperty("username");        password = prop.getProperty("password");    }    public static Connection open() {        try {            Class.forName(driver);            return DriverManager.getConnection(url, username, password);        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    public static void close(Connection conn) {        if (conn != null) {            try {                conn.close();            } catch (SQLException e) {                e.printStackTrace();            }        }    }}

    DAO接口的定义如下:

    import java.util.List;public interface CustomerDAO {    void add(Customer c);    void update(Customer c);    void delete(int id);    Customer getCustomerById(int id);    List
    query();}

    DAO实现类的示例代码如下:

    import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;public class CustomerDaoImp implements CustomerDAO {    public void add(Customer c) {        Connection conn = DBUtil.open();        String sql = "insert into person(name, age) values (?, ?)";        try {            PreparedStatement pstmt = conn.prepareStatement(sql);            pstmt.setString(1, c.getName());            pstmt.setInt(2, c.getAge());            pstmt.executeUpdate();        } catch (SQLException e) {            e.printStackTrace();        } finally {            DBUtil.close(conn);        }    }    public void update(Customer c) {        Connection conn = DBUtil.open();        String sql = "update person set name=?, age=? where id =?";        try {            PreparedStatement pstmt = conn.prepareStatement(sql);            pstmt.setString(1, c.getName());            pstmt.setInt(2, c.getAge());            pstmt.setInt(3, c.getId());            pstmt.executeUpdate();        } catch (SQLException e) {            e.printStackTrace();        } finally {            DBUtil.close(conn);        }    }    public void delete(int id) {        Connection conn = DBUtil.open();        String sql = "delete from person where id =?";        try {            PreparedStatement pstmt = conn.prepareStatement(sql);            pstmt.setInt(1, id);            pstmt.executeUpdate();        } catch (SQLException e) {            e.printStackTrace();        } finally {            DBUtil.close(conn);        }    }    public Customer getCustomerById(int id) {        Connection conn = DBUtil.open();        String sql = "select id, name, age from person where id =?";        try {            PreparedStatement pstmt = conn.prepareStatement(sql);            pstmt.setInt(1, id);            ResultSet rs = pstmt.executeQuery();            if (rs.next()) {                Customer c = new Customer();                c.setId(rs.getInt(1));                c.setName(rs.getString(2));                c.setAge(rs.getInt(3));                return c;            }        } catch (SQLException e) {            e.printStackTrace();        } finally {            DBUtil.close(conn);        }        return null;    }    public List
    query() { Connection conn = DBUtil.open(); String sql = "select id, name, age from person"; List
    list = new ArrayList<>(); try { Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { int id = rs.getInt(1); String name = rs.getString(2); int age = rs.getInt(3); Customer c = new Customer(); c.setId(id); c.setName(name); c.setAge(age); list.add(c); } return list; } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn); } return null; }}

    这种结构使得代码更易于管理和扩展,同时遵循了面向接口编程的原则,提高了代码的可维护性和复用性。

    转载地址:http://awbh.baihongyu.com/

    你可能感兴趣的文章
    mysql 视图,视图更新删除
    查看>>
    MySQL 触发器
    查看>>
    mysql 让所有IP访问数据库
    查看>>
    mysql 记录的增删改查
    查看>>
    MySQL 设置数据库的隔离级别
    查看>>
    MySQL 证明为什么用limit时,offset很大会影响性能
    查看>>
    Mysql 语句操作索引SQL语句
    查看>>
    MySQL 误操作后数据恢复(update,delete忘加where条件)
    查看>>
    MySQL 调优/优化的 101 个建议!
    查看>>
    mysql 转义字符用法_MySql 转义字符的使用说明
    查看>>
    mysql 输入密码秒退
    查看>>
    mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
    查看>>
    mysql 通过查看mysql 配置参数、状态来优化你的mysql
    查看>>
    mysql 里对root及普通用户赋权及更改密码的一些命令
    查看>>
    Mysql 重置自增列的开始序号
    查看>>
    mysql 锁机制 mvcc_Mysql性能优化-事务、锁和MVCC
    查看>>
    MySQL 错误
    查看>>
    mysql 随机数 rand使用
    查看>>
    MySQL 面试题汇总
    查看>>
    MySQL 面试,必须掌握的 8 大核心点
    查看>>