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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql jdbc dao_MYSQL 之 JDBC(九):增删改查(七)DAO的补充和重构

發布時間:2023/12/18 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql jdbc dao_MYSQL 之 JDBC(九):增删改查(七)DAO的补充和重构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DAO重構后的代碼

package com.litian.jdbc;

import org.apache.commons.beanutils.BeanUtils;

import java.sql.*;

import java.util.ArrayList;

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) {

List result = getForList(clazz, sql, args);

if (result.size() > 0) {

return result.get(0);

}

return null;

/* 根據下面的方法進行了改寫

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

BeanUtils.setProperty(entity, propertyName, value);

}

}

} catch (Exception e) {

e.printStackTrace();

} finally {

JDBCTools.release(rs, ps, conn);

}

return entity;

*/

}

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

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

List list = new ArrayList<>();

Connection conn = null;

PreparedStatement ps = null;

ResultSet rs = null;

try {

// 1. 得到結果集

conn = JDBCTools.getConnection();

ps = conn.prepareStatement(sql);

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

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

}

rs = ps.executeQuery();

// 2. 處理結果集,得到一個Map對應的List,其中一個Map對象就是一條記錄,Map的Key為rs中列的別名,Value為列的值

List> values = handleResultSetToMapList(rs);

// 3. 把Map的List轉為clazz對應的List,其中Map的key即clazz對應的對象的propertyName,value即為clazz對應對象的propertyValue

list = transferMapListToBeanList(clazz, values);

} catch (Exception e) {

e.printStackTrace();

} finally {

JDBCTools.release(rs, ps, conn);

}

return list;

}

public List transferMapListToBeanList(Class clazz, List> values) throws Exception {

// 12. 判斷List是否為空集合,若不為空,則遍歷List,得到一個個Map對象,再把一個Map對象轉為一個Class參數對應的Object對象。

List result = new ArrayList();

T bean = null;

if (values.size() > 0) {

for (Map m : values) {

bean = clazz.newInstance();

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

String propertyName = entry.getKey();

Object value = entry.getValue();

BeanUtils.setProperty(bean, propertyName, value);

}

result.add(bean);

}

}

return result;

}

/**

* 處理結果集,得到Map的一個List,其中一個Map對象對應一條記錄

*

* @param rs

* @return

* @throws SQLException

*/

private List> handleResultSetToMapList(ResultSet rs) throws SQLException {

// 5. 若ResultSet中有記錄,準備一個List>

// 鍵:存放列的別名;值:存放列的值,其中一個Map對象對應著一條記錄

List> values = new ArrayList<>();

List columnLabels = getColumnLabels(rs);

// 7. 處理ResultSet,使用while循環

Map maps = null;

while (rs.next()) {

maps = new HashMap<>();

for (String columnLabel : columnLabels) {

Object value = rs.getObject(columnLabel);

maps.put(columnLabel, value);

}

// 11. 把一條記錄的填充好的Map對象放入5準備的List中

values.add(maps);

}

return values;

}

/**

* 獲取結果集ColumnLabel對應的結果集

*/

private List getColumnLabels(ResultSet rs) throws SQLException {

List labels = new ArrayList<>();

ResultSetMetaData rsmd = rs.getMetaData();

for (int i = 0; i < rsmd.getColumnCount(); i++) {

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

labels.add(columnLabel);

}

return labels;

}

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

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

Connection conn = null;

PreparedStatement ps = null;

ResultSet rs = null;

try {

// 1. 得到結果集

conn = JDBCTools.getConnection();

ps = conn.prepareStatement(sql);

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

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

}

rs = ps.executeQuery();

// 2. 取得結果

if (rs.next()){

return (E) rs.getObject(1);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

JDBCTools.release(rs, ps, conn);

}

return null;

}

}

測試

package com.litian.jdbc;

import java.sql.Date;

import java.sql.Timestamp;

import java.util.List;

/**

* @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);

// 測試getForList

// String sql2 = "select id, username, pwd, regTime, lastLoginTime from t_user where id";

// List us = dao.getForList(User.class, sql2, 10);

// System.out.println(us);

// 測試getForValue

String sql3 = "select username from t_user where id = ?";

String cc = dao.getForValue(sql3, 1);

System.out.println(cc);

}

}

總結

以上是生活随笔為你收集整理的mysql jdbc dao_MYSQL 之 JDBC(九):增删改查(七)DAO的补充和重构的全部內容,希望文章能夠幫你解決所遇到的問題。

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