博客
关于我
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/

    你可能感兴趣的文章
    Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
    查看>>
    multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
    查看>>
    mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
    查看>>
    Multiple websites on single instance of IIS
    查看>>
    mysql CONCAT()函数拼接有NULL
    查看>>
    multiprocessing.Manager 嵌套共享对象不适用于队列
    查看>>
    multiprocessing.pool.map 和带有两个参数的函数
    查看>>
    MYSQL CONCAT函数
    查看>>
    multiprocessing.Pool:map_async 和 imap 有什么区别?
    查看>>
    MySQL Connector/Net 句柄泄露
    查看>>
    multiprocessor(中)
    查看>>
    mysql CPU使用率过高的一次处理经历
    查看>>
    Multisim中555定时器使用技巧
    查看>>
    MySQL CRUD 数据表基础操作实战
    查看>>
    multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
    查看>>
    mysql csv import meets charset
    查看>>
    multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
    查看>>
    MySQL DBA 数据库优化策略
    查看>>
    multi_index_container
    查看>>
    mutiplemap 总结
    查看>>