本文共 5446 字,大约阅读时间需要 18 分钟。
DAO的全称是Data Access Object,旨在将对数据库的操作进行封装,使开发人员可以通过调用简单的方法与数据库进行交互,而无需直接处理连接或事务管理。
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); Listquery();}
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 Listquery() { 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/