反射封装工具类-----零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.mzph.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…