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