當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring-学习笔记06【spring_day02资料_dbutils】
生活随笔
收集整理的這篇文章主要介紹了
Spring-学习笔记06【spring_day02资料_dbutils】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- Java后端 學習路線 筆記匯總表【黑馬程序員】
目錄
01_分析jdbc中操作問題-抽取增刪改方法的通用方法
1.1、DBAssit.java
02_抽取查詢方法-編寫封裝一個實體對象的結果集處理器
2.1、BeanHandler.java
03_實現查詢所有的封裝以及dbutils介紹
04_dbutils的使用
01_分析jdbc中操作問題-抽取增刪改方法的通用方法
?
1.1、DBAssit.java
package com.itheima.dbassit;import com.itheima.handler.ResultSetHandler;import javax.sql.DataSource; import java.sql.Connection; import java.sql.ParameterMetaData; import java.sql.PreparedStatement; import java.sql.ResultSet;/*** 封裝的工具類*/ public class DBAssit {private DataSource dataSource;public DBAssit(DataSource dataSource) {this.dataSource = dataSource;}/*** 執行增刪改的方法** @param sql* @param params* @return*/public int update(String sql, Object... params) {Connection conn = null;PreparedStatement pstm = null;try {//1.得到連接conn = dataSource.getConnection();//2.使用連接和參數的sql語句創建預處理對象pstm = conn.prepareStatement(sql);//3.得到sql語句參數的源信息(有幾個參數,都什么類型等等)ParameterMetaData pmd = pstm.getParameterMetaData();//4.判斷語句中參數的個數和方法參數params的個數是否一致,不一致肯定沒法執行int parameterCount = pmd.getParameterCount();//參數的個數(問號的個數)if (parameterCount > 0) {if (params == null) {throw new NullPointerException("沒有sql語句執行必須的參數");}if (params.length != parameterCount) {throw new RuntimeException("傳入的參數個數和語句所需的參數個數不一致,語句無法執行");}}//5.給sql語句的參數賦值for (int i = 0; i < parameterCount; i++) {pstm.setObject(i + 1, params[i]);}//6.執行語句int res = pstm.executeUpdate();//7.返回執行結果return res;} catch (Exception e) {throw new RuntimeException(e);} finally {release(conn, pstm, null);}}public Object query(String sql, ResultSetHandler rsh, Object... params) {Connection conn = null;PreparedStatement pstm = null;ResultSet rs = null;try {//1.得到連接conn = dataSource.getConnection();//2.使用連接和參數的sql語句創建預處理對象pstm = conn.prepareStatement(sql);//3.得到sql語句參數的源信息(有幾個參數,都什么類型等等)ParameterMetaData pmd = pstm.getParameterMetaData();//4.判斷語句中參數的個數和方法參數params的個數是否一致,不一致肯定沒法執行int parameterCount = pmd.getParameterCount();//參數的個數(問號的個數)if (parameterCount > 0) {if (params == null) {throw new NullPointerException("沒有sql語句執行必須的參數");}if (params.length != parameterCount) {throw new RuntimeException("傳入的參數個數和語句所需的參數個數不一致,語句無法執行");}}//5.給sql語句的參數賦值for (int i = 0; i < parameterCount; i++) {pstm.setObject(i + 1, params[i]);}//6.執行語句rs = pstm.executeQuery();//7.返回執行結果return rsh.handle(rs);} catch (Exception e) {throw new RuntimeException(e);} finally {release(conn, pstm, rs);}}private void release(Connection conn, PreparedStatement pstm, ResultSet rs) {if (rs != null) {try {rs.close();} catch (Exception e) {e.printStackTrace();}}if (pstm != null) {try {pstm.close();} catch (Exception e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (Exception e) {e.printStackTrace();}}} }02_抽取查詢方法-編寫封裝一個實體對象的結果集處理器
2.1、BeanHandler.java
package com.itheima.handler.impl;import com.itheima.handler.ResultSetHandler;import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.sql.ResultSet; import java.sql.ResultSetMetaData;/*** 結果集封裝的具體實現類。* 此類實現的是把一個結果集rs的內容封裝到一個指定的實體類對象中* 使用要求:實體類中的屬性必須和表中的列名一致(sql語句查詢出來的列名一致)** @param <T>*/ public class BeanHandler implements ResultSetHandler {private Class domainClass;public BeanHandler(Class domainClass) {this.domainClass = domainClass;}/*** 把rs的內容封裝到domainClass所表示的類中** @param rs* @return*/@Overridepublic Object handle(ResultSet rs) {try {//1.創建一個實體類對象Object bean = domainClass.newInstance();//2.判斷是否有結果集if (rs.next()) {//3.得到結果集rs中所有的列名//要想得到列名,得先得到結果集的源信息ResultSetMetaData rsmd = rs.getMetaData();//得到源信息之后,還要得到有多少列int columnCount = rsmd.getColumnCount();//遍歷列數for (int i = 1; i <= columnCount; i++) {//得到每列的名稱String columnName = rsmd.getColumnName(i);//列名其實就是實體類的屬性名稱,于是就可以使用列名得到實體類中屬性的描述器PropertyDescriptor pd = new PropertyDescriptor(columnName, domainClass);//實體類中定義的私有類成員和它的get以及set方法//獲取屬性的寫入方法(set方法)Method method = pd.getWriteMethod();//獲取當前列名所對應的值Object columnValue = rs.getObject(columnName);//通過執行寫方法把得到的值給屬性賦上method.invoke(bean, columnValue);}}//4.返回return bean;} catch (Exception e) {throw new RuntimeException(e);}} }03_實現查詢所有的封裝以及dbutils介紹
04_dbutils的使用
總結
以上是生活随笔為你收集整理的Spring-学习笔记06【spring_day02资料_dbutils】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring-学习笔记06【Spring
- 下一篇: Spring-学习笔记07【银行转账案例