日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DAO 学习笔记

發布時間:2023/12/3 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DAO 学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 什么是 DAO?
  • 如何寫 DAO?
  • 示例代碼

什么是 DAO?

Data Access Object(DAO),數據訪問對象/數據存取對象。DAO 是封裝數據庫訪問邏輯的組件/類 。

定義一個類,這個類中的方法封裝了數據庫訪問邏輯,要訪問數據庫時,只要調用DAO相關的方法就可以了,調用者(一般是業務邏輯模塊,即控制器)不需要了解底層的數據訪問細節就可以實現數據訪問。這樣一來,當底層的數據訪問細節發生改變,不 會影響到調用者。

DAO 可以設計成單例模式,因為往往我們只是調用 DAO 的方法獲取數據庫中的數據,里面沒有成員變量,所以沒有必要創建多個 DAO 對象。

如何寫 DAO?

  • 寫實體類和數據表對應
    為了方便處理數據庫中的記錄,可以定義與表記錄對應的實體類,即該類對象與數據表中的每條記錄一一對應,或者說可以將數據庫中的某條記錄轉換成一個實體類的實例
    比如 Employee 類,提供 id,name,salary,age 屬性及相關的 get/set 方法,我們可以將 employee 表中的記錄轉化成一個 Employee 對象。

  • 寫 DAO 接口,聲明一些方法
    寫 DAO 接口,聲明一些數據訪問方法,例如:刪除記錄、增加記錄、修改記錄等。這些方法不要涉及具體的技術。
    例如,聲明了以下的方法:
    public void save(Employee e) throws SQLException;
    這種方式不好,因為出現了 jdbc 的異常類,這就要求實現該方法只能使用 jdbc。 換一種方式來聲明更好,如下:
    public void save(Employee e) throws Exception;
    public List<Employee> findAll() throws Exception;

  • 寫 DAO 實現類
    再寫 DAO 實現類,采用具體的技術實現 DAO 接口有關的方法,且這些方法會用到實體類對象,并封裝好與數據庫連接的代碼及有關的業務代碼
    例如:
    使用 jdbc 實現 EmployeeDAO 接口,寫一個實現類 EmployeeDAOJdbcImpl。

  • 寫 DAO 工廠類(即工廠模式)
    寫工廠類,通過屬性文件(.properties)來配置不同的參數,從而可以獲取不同技術實現的DAO對象。

  • 工廠類:封裝了對象的創建細節,為調用者提供符合要求的對象。
    工廠模式可以通過簡單的配置文件管理 DAO 的實現類。

    示例代碼

    DAO接口:

    package priv.lwx.servlet.dao;import priv.lwx.servlet.entity.Employee;import java.util.List;/*** 定義DAO接口** @author liaowenxiong* @date 2022/3/14 09:43*/public interface EmployeeDAO {void save(Employee e) throws Exception;void delete(int id) throws Exception;void update(Employee e) throws Exception;Employee findById(int id) throws Exception;List<Employee> findAll() throws Exception;}

    DAO實現類:

    package priv.lwx.servlet.dao.impl;import priv.lwx.servlet.dao.EmployeeDAO; import priv.lwx.servlet.entity.Employee; import priv.lwx.servlet.util.ConnectionUtils;import java.math.BigDecimal; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List;/*** EmployeeDAO的實現類,使用JDBC技術實現** @author liaowenxiong* @date 2022/3/14 09:54*/public class EmployeeDAOJdbcImpl implements EmployeeDAO {/*** 新增雇員** @param e 要新增的雇員數據* @throws Exception*/@Overridepublic void save(Employee e) throws Exception {String sql = "insert into emp(name,salary,age) values(?,?,?)";Connection conn = ConnectionUtils.getConnection();PreparedStatement pstmt = null;pstmt = conn.prepareStatement(sql);pstmt.setString(1, e.getName());pstmt.setBigDecimal(2, e.getSalary());pstmt.setByte(3, e.getAge());pstmt.executeUpdate();ConnectionUtils.close(pstmt, conn);}/*** 根據雇員ID刪除雇員** @param id* @throws Exception*/@Overridepublic void delete(int id) throws Exception {String sql = "delete from emp where id=?";Connection conn = ConnectionUtils.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, id);pstmt.executeUpdate();ConnectionUtils.close(pstmt, conn);}/*** 更新某個雇員信息** @param e* @throws Exception*/@Overridepublic void update(Employee e) throws Exception {String sql = "update emp set name=?,salary=?,age=? where id=?";Connection conn = ConnectionUtils.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setString(1, e.getName());pstmt.setBigDecimal(2, e.getSalary());pstmt.setByte(3, e.getAge());pstmt.setInt(4, e.getId());pstmt.executeUpdate();ConnectionUtils.close(pstmt, conn);}/*** 根據雇員ID查詢雇員信息** @param id* @return* @throws Exception*/@Overridepublic Employee findById(int id) throws Exception {String sql = "select * from emp where id=?";Connection conn = ConnectionUtils.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, id);ResultSet rs = pstmt.executeQuery();rs.next();String name = rs.getString("name");BigDecimal salary = rs.getBigDecimal("salary");byte age = rs.getByte("age");Employee e = new Employee();e.setId(id);e.setName(name);e.setSalary(salary);e.setAge(age);return e;}/*** 查詢所有雇員的信息** @return* @throws Exception*/@Overridepublic List<Employee> findAll() throws Exception {String sql = "select * from emp";Connection conn = ConnectionUtils.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql);ResultSet rs = pstmt.executeQuery();List<Employee> emps = new ArrayList<>();while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");BigDecimal salary = rs.getBigDecimal("salary");byte age = rs.getByte("age");Employee e = new Employee();e.setId(id);e.setName(name);e.setSalary(salary);e.setAge(age);emps.add(e);}return emps;} }

    總結

    以上是生活随笔為你收集整理的DAO 学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。