放射封装工具类-----零SQL插入

发布时间:2017-3-30 4:54:40 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"放射封装工具类-----零SQL插入 ",主要涉及到放射封装工具类-----零SQL插入 方面的内容,对于放射封装工具类-----零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 ="[email protected]";		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)){//String				ps.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>

上一篇:shell查看并修复网络连接
下一篇:java 消息机制 ActiveMQ入门实例

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款