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); } }