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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql增删改查 dao_MYSQL 之 JDBC(七):增删改查(五) DAO设计模式

發布時間:2024/9/27 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql增删改查 dao_MYSQL 之 JDBC(七):增删改查(五) DAO设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Data Access Object,數據訪問對象

what:訪問數據信息的類。包含了對數據的CRUD(create、read、update、delete,增刪改查)操作,而不包含任何業務相關的信息。

why:實現功能的模塊化。更有利于代碼的維護和升級。DAO可以被子類集成或直接使用

how:使用JDBC編寫DAO可能會包含的方法:

void update()

// insert, update, delete 操作都可以包含在其中

void update(String sql, Object ... args)

查詢

// 查詢一條記錄,返回對應的對象

T get(Class clazz, String sql, Object ... args)

// 查詢多條記錄,返回對應的對象的集合

List getForList(Class clazz, String sql, Object ... args)

// 返回某條記錄的某一個字段的值或一個統計的值(一共有多少記錄等。)

E getForValue(String sql, Object ... args)

代碼實現

DAO

package com.litian.jdbc;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* @author: Li Tian

* @contact: litian_cup@163.com

* @software: IntelliJ IDEA

* @file: DAO.java

* @time: 2020/3/26 18:37

* @desc: |

*/

public class DAO {

// insert, update, delete 操作都可以包含在其中

void update(String sql, Object... args) {

Connection conn = null;

PreparedStatement ps = null;

try {

conn = JDBCTools.getConnection();

ps = conn.prepareStatement(sql);

for (int i = 0; i < args.length; i++) {

ps.setObject(i + 1, args[i]);

}

ps.executeUpdate();

} catch (Exception e) {

e.printStackTrace();

} finally {

JDBCTools.release(null, ps, conn);

}

}

// 查詢一條記錄,返回對應的對象

T get(Class clazz, String sql, Object... args) {

T entity = null;

Connection conn = null;

PreparedStatement ps = null;

ResultSet rs = null;

try {

// 1. 獲取Connection

conn = JDBCTools.getConnection();

// 2. 獲取PreparedStatement

ps = conn.prepareStatement(sql);

// 3. 填充占位符

for (int i = 0; i < args.length; i++) {

ps.setObject(i + 1, args[i]);

}

// 4. 進行查詢,得到ResultSet

rs = ps.executeQuery();

// 5. 若ResultSet中有記錄,準備一個Map: 鍵:存放列的別名;值:存放列的值

if (rs.next()) {

Map values = new HashMap<>();

// 6. 得到ResultSetMetaData對象

ResultSetMetaData rsmd = rs.getMetaData();

// 7. 處理ResultSet,把指針向下移動一個單位

// 8. 由ResultSetMetaData對象得到結果集中有多少列

int columnCount = rsmd.getColumnCount();

// 9. 由ResultSetMetaData得到每一列的別名,由ResultSet得到具體每一列的值

for (int i = 0; i < columnCount; i++) {

String columnLabel = rsmd.getColumnLabel(i + 1);

Object columnValue = rs.getObject(columnLabel);

// 10. 填充Map對象

values.put(columnLabel, columnValue);

}

// 11. 用反射創建Class對象的對象

entity = clazz.newInstance();

// 12. 遍歷Map對象,用反射填充對象的屬性值:屬性名為Map中的Key,屬性值為Map中的Value

for (Map.Entry entry : values.entrySet()) {

String propertyName = entry.getKey();

Object value = entry.getValue();

ReflectionUtils.setFieldValue(entity, propertyName, value);

}

}

} catch (Exception e) {

e.printStackTrace();

} finally {

JDBCTools.release(rs, ps, conn);

}

return entity;

}

// 查詢多條記錄,返回對應的對象的集合

List getForList(Class clazz, String sql, Object... args) {

return null;

}

// 返回某條記錄的某一個字段的值或一個統計的值(一共有多少記錄等。)

E getForValue(String sql, Object... args) {

return null;

}

}

DAO測試

package com.litian.jdbc;

import java.sql.Date;

import java.sql.Timestamp;

/**

* @author: Li Tian

* @contact: litian_cup@163.com

* @software: IntelliJ IDEA

* @file: DAOTest.java

* @time: 2020/3/26 18:59

* @desc: |

*/

public class DAOTest {

public static void main(String[] args) {

DAO dao = new DAO();

// 測試update

// String sql = "insert into t_user(id, username, pwd, regTime, lastLoginTime) values(?,?,?,?,?)";

// dao.update(sql, 4, "李英俊", "123456", new Date(System.currentTimeMillis()), new Timestamp(System.currentTimeMillis()));

// 測試get

String sql = "select id, username, pwd, regTime, lastLoginTime from t_user where id=?";

User u = dao.get(User.class, sql, 4);

System.out.println(u);

}

}

總結

以上是生活随笔為你收集整理的mysql增删改查 dao_MYSQL 之 JDBC(七):增删改查(五) DAO设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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