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

    你可能感兴趣的文章
    mysql5.7命令总结
    查看>>
    mysql5.7安装
    查看>>
    mysql5.7性能调优my.ini
    查看>>
    MySQL5.7新增Performance Schema表
    查看>>
    Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
    查看>>
    Webpack 之 basic chunk graph
    查看>>
    Mysql5.7版本单机版my.cnf配置文件
    查看>>
    mysql5.7的安装和Navicat的安装
    查看>>
    mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
    查看>>
    Mysql8 数据库安装及主从配置 | Spring Cloud 2
    查看>>
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MYSQL8.0以上忘记root密码
    查看>>
    Mysql8.0以上重置初始密码的方法
    查看>>
    mysql8.0新特性-自增变量的持久化
    查看>>
    Mysql8.0注意url变更写法
    查看>>
    Mysql8.0的特性
    查看>>
    MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    查看>>
    MySQL8修改密码的方法
    查看>>
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>