反射封裝工具類-----零SQL插入

V_1.0?需求:開發一個工具方法,輔助初級程序員在不需要掌握sql命令和JDBC的情況下,實現對數據庫的插入操作。

V_4.0??實現0sql插入操作需要解決的問題.

???????????1.?如何確認當前【陌生對象】關聯的【表名】

???????????2.?如何確認當前表中需要添加數據的字段

???????????3.?如何將對象中數據和表中字段做一個一一對應

V_5.0?解決方案:

????????????????????【實體類映射文件】描述某一個實體類與表的對象關系。

????????????????????通過這個文件了解當前類關聯的【表名稱】

????????????????????通過這個文件了解當前【表】和當前【對象】的字段和屬性對應關系??

工具類實現:
public class ReflectUtil {/*** 步驟:* 		1.將xml文件和實體類對象加載到內存中* 		2.將obj對象中數據,生成插入sql命令* @param obj 實體對象* @param xmlPath 實體對象和數據庫表映射xml表*/public static  void save(Object obj,String xmlPath) throws Exception{//0.局部變量String xPath = "";	Connection con =null;PreparedStatement ps =null;String sql="";String sql_v="values (";//1.將xml文件和實體類對象加載到內存中SAXReader reader = new SAXReader();Document doc =reader.read(xmlPath);Class clazz =obj.getClass();//2.將obj對象中數據,生成插入sql命令//2.1 獲得要插入的表名xPath ="//@table";Attribute e_table =(Attribute) doc.selectSingleNode(xPath);String tableName =e_table.getValue();//2.2 jdbc連接數據庫Class.forName("com.mysql.jdbc.Driver");con= DriverManager.getConnection("jdbc:mysql://localhost:3306/databases", "root", "root");sql ="insert into "+tableName+"(";Field[] fields =clazz.getDeclaredFields();//拼接sql語句for(int i=0;i<fields.length;i++){Field fieldObj = fields[i];String fieldName =fieldObj.getName();//從xml中查找該field對應的數據類型xPath = "//property[@name='"+fieldName+"']";Element ele_f =(Element) doc.selectSingleNode(xPath);String colName =ele_f.attribute("colName").getValue();if(i==fields.length-1){sql+=colName+")";sql_v+="?)";}else{sql+=colName+",";sql_v+="?,";}}sql+=sql_v;//預編譯ps=con.prepareStatement(sql);//預編譯對象賦值for(int i=0;i<fields.length;i++){Field fieldObj = fields[i];String fieldName =fieldObj.getName();//從xml中查找該field對應的數據類型xPath = "//property[@name='"+fieldName+"']";Element ele_f =(Element) doc.selectSingleNode(xPath);//獲得列對應的數據類型String colType =ele_f.attribute("colType").getValue();//獲取權限fieldObj.setAccessible(true);//從實體類對象中獲得值Object valueObj = fieldObj.get(obj);if("int".equals(colType)){ps.setInt(i+1, (Integer)valueObj);}else if("varchar".equals(colType)){//Stringps.setString(i+1, (java.lang.String)valueObj);}else if("double".equals(colType)){ps.setDouble(i+1, (Double)valueObj);}else if("date".equals(colType)){//mysql中支持將一個字符串賦值給日期類Date data = (Date)valueObj;SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");ps.setString(i+1, sdf.format(data));}}int count =ps.executeUpdate();}
}
表和實體類映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans><bean classPath="com.xiehe.entily.DeptVO" table="dept"><property name="deptNo" type="int" colName="DEPTNO" colType ="int"></property><property name="dName" type="java.lang.String" colName="DNAME" colType="varchar"></property><property name="loc" type="java.lang.String" colName="LOC" colType="varchar"></property></bean>
</beans>

?

轉載于:https://www.cnblogs.com/he-shao/p/6068309.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285493.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285493.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285493.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MathType插入帶序號公式的兩種方法

方法一&#xff1a; 由于我之前使用表格15% 70% 15%來布局的&#xff0c;所以最開始相的就是如何錄入公示后插入公式序號&#xff0c;如下圖所示 先設置序號格式 錄好公式后點“Insert Number”就好了&#xff0c;這樣的話需要緊挨著公式&#xff0c;用空格把他空到最右側就好了…

數據結構算法:基于C#語言用圖實現最短路徑,太妙了!

文章目錄 構造類并實現最短路徑方法設計界面編寫程序測試新的Graph類構造類并實現最短路徑方法 在前面的C#編程中,我們已經完成了諸如遍歷、最小生成樹等許多方法,這個類已經可以完成諸如鄰接矩陣輸入、頂點矩陣輸入問題。這個類在Graph2.cs中。 現在,我們新建立一個WINDOW…

【系統設計】鄰近服務

在本文中&#xff0c;我們將設計一個鄰近服務&#xff0c;用來發現用戶附近的地方&#xff0c;比如餐館&#xff0c;酒店&#xff0c;商場等。設計要求 從一個小明去面試的故事開始。面試官&#xff1a;你好&#xff0c;我想考察一下你的設計能力&#xff0c;如果讓你設計一個…

[轉]Redis持久化存儲(AOF與RDB兩種模式)

Redis中數據存儲模式有2種&#xff1a;cache-only,persistence; cache-only即只做為“緩存”服務&#xff0c;不持久數據&#xff0c;數據在服務終止后將消失&#xff0c;此模式下也將不存在“數據恢復”的手段&#xff0c;是一種安全性低/效率高/容易擴展的方式&#xff1b;pe…

C語言試題112之一個數如果恰好等于它的因子之和,這個數就稱為“完數”。例如 6=1+2+3.編程 找出 1000 以內的所有完數。

?作者簡介:大家好我是碼莎拉蒂,CSDN博客專家?????? ??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 1、題目 題目:一個數如果恰好等于它的因子之和,這個數就稱為“完數”。例如 6=1+2+3.編程 找出 …

關于jstl.jar引用問題及解決方法

在前文SSM說到因為從MyEclipse換成了Eclipse。有些架包自動缺失。 造成&#xff1a;"org.apache.jasper.JasperException: This absolute uri (http://java.sun.com/jsp/jstl/core ) cannot be resolved in either web.xml or the jar files deployed with this applicati…

網絡技術基礎與計算思維實驗教程_2.3_單交換機VLAN配置實驗

2.3.1 實驗內容 2.3.2實驗目的 實驗的目的一是驗證交換機 VLAN 配置過程; 二是驗證屬于同一 VLAN的終端之間的通信過程; 三是驗證每一個 VLAN 為獨立的廣播域; 四是驗證屬于不同 VLAN的兩個終端之間不能通信; 五是驗證轉發項和 VLAN的對應關系。 2.3.3實驗原理 默認情況下,交換…

【數據庫原理及應用】經典題庫附答案(14章全)——第一章:數據庫基礎知識

【數據庫原理及應用】經典題庫附答案&#xff08;14章全&#xff09;——第一章&#xff1a;數據庫基礎知識 【數據庫原理及應用】經典題庫附答案&#xff08;14章全&#xff09;——第二章&#xff1a;關系數據庫知識 【數據庫原理及應用】經典題庫附答案&#xff08;14章全&a…

mockito mock測試框架

1.簡介 mock&#xff0c;[m?k]&#xff0c;adj. 虛擬的&#xff0c;模擬的。 如果你的代碼對另一個類或者接口有依賴&#xff0c;mock測試能夠幫你模擬這些依賴&#xff0c;從而完成測試。 使用場景&#xff1a; 類A有一個方法fun(B b)&#xff0c;它依賴于B類的一個對象。所以…

dotnet-exec 0.5.0 released

dotnet-exec 0.5.0 releasedIntrodotnet-exec 是一個 C# 程序的小工具&#xff0c;可以用來運行一些簡單的 C# 程序而無需創建項目文件&#xff0c;而且可以自定義項目的入口方法&#xff0c;支持但不限于 Main 方法Install/Updatedotnet-exec 是一個 dotnet tool&#xff0c;可…

C語言試題113之一球從 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第 10 次落地時,共經過多少米?第 10 次反彈多高?

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:一球從 100 米高度自由落下,…

超酷的 Vim 搜索技巧

盡管目前我們已經涉及[1] Vim 的多種特性&#xff0c;但此編輯器的特性集如此龐大&#xff0c;不管我們學習多少&#xff0c;似乎仍然遠遠不足。承接我們的 Vim 教程系列&#xff0c;本文我們將討論 Vim 提供的多種搜索技術。 不過在此之前&#xff0c;請注意文中涉及到的所有…

對面的00后萌新看過來:淺析計算機編程在高等職業GIS專業中的重要性

文章目錄什么是傳說中的GIS&#xff1f;GIS必修哪些課程&#xff1f;學GIS到底何去何從&#xff1f;什么是計算機編程&#xff1f;編程在GIS中的地位如何&#xff1f;高等職業GIS如何教學&#xff1f;專科生怎樣學好GIS&#xff1f;什么是傳說中的GIS&#xff1f; GIS是“3S”之…

SQLServer Agent執行[分發清除: distribution] 無法刪除快照文件

由于之前創建的發布訂閱造成嚴重的性能壓力&#xff0c;癥狀表現為發布訂閱表查詢產生CMEMTHREAD suspend等待&#xff0c;由于開發配置每隔十分鐘會產生大量的SQLCOMMAND&#xff08;create table&#xff0c;create index大量的命令&#xff09;發布訂閱 復制監視器 有Memor…

二維碼

二維碼 QR_Code http://www.psoft.sk/product.php?id27 http://www.barcodesoft.com/zh-cn/delphi-barcode.aspx 生成二維碼 Bar_Code:TpsBarcode; Bar_Code.BarCode : www.aaa.com; procedure TForm1.Button4Click(Sender: TObject);var R: TRect;begin R.Create(700, 1,1000…

C語言試題114之猴子吃桃問題

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:猴子吃桃問題:猴子第一天摘…

.NET 7 的 JWT 配置太方便了!

微軟宣布 .NET 7 preview5 有一些較大的改進&#xff0c; 包括 JWT 身份驗證的簡化和自動配置。我安裝了 preview 5 嘗試了新的 JWT 身份配置。如果您想把現有的項目更新到 .Net 7 preview 5, 下面是一個快速更新的命令。Update all Microsoft.AspNetCore.* package references…

【數據庫原理及應用】經典題庫附答案(14章全)——第二章:關系數據庫知識

【數據庫原理及應用】經典題庫附答案&#xff08;14章全&#xff09;——第一章&#xff1a;數據庫基礎知識 【數據庫原理及應用】經典題庫附答案&#xff08;14章全&#xff09;——第二章&#xff1a;關系數據庫知識 【數據庫原理及應用】經典題庫附答案&#xff08;14章全&a…

[轉]面試官,不要再問我三次握手和四次揮手

文章目錄 1. 三次握手 1.1 為什么需要三次握手&#xff0c;兩次不行嗎&#xff1f;1.2 什么是半連接隊列&#xff1f;1.3 ISN(Initial Sequence Number)是固定的嗎&#xff1f;1.4 三次握手過程中可以攜帶數據嗎&#xff1f;1.5 SYN攻擊是什么&#xff1f;2. 四次揮手 2.1 揮手…

杭電2090

1 //這題是有多水。。。。。。。2 #include<stdio.h>3 char s[100];4 int main()5 {6 double n,price,sum0;7 while(~scanf("%s%lf%lf",s,&n,&price))8 sumn*price;9 printf("%.1lf\n",sum); 10 } 轉載于:https://www.c…