博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 产生的固体物的基础上 增删改的SQL声明
阅读量:6501 次
发布时间:2019-06-24

本文共 4840 字,大约阅读时间需要 16 分钟。

经过多次修改。最后版本。

 

package com.power.sql;import java.lang.reflect.Field;import java.lang.reflect.Modifier;import java.util.List;import java.util.Vector;import org.apache.commons.lang3.reflect.FieldUtils;/** * @author Gary Huang * 博客地址:http://blog.csdn.net/hfmbook/article/details/41290641 *  * */public class UpdateSql {	private Object target ; 		private String idName ; 		private Object idValue ; 		private SqlType currentType ; 		public enum SqlType {		INSERT, UPDATE, DELETE 	}		public UpdateSql(SqlType sqlType, Object target) {		this.target = target ; 		switch (sqlType) {		case INSERT:			currentType = SqlType.INSERT ;			createInsert(); 			break;  		case UPDATE:			currentType = SqlType.UPDATE ;			createUpdate() ; 			break;		case DELETE:			currentType = SqlType.DELETE ;			createDelete() ; 			break ;		}	}		public UpdateSql(Class
target){ String tableName = getTableNameForClass( target ); getFields( target ); StringBuffer sqlBuffer = new StringBuffer() ; sqlBuffer.append("DELETE FROM ").append(tableName).append(" WHERE ") ; for(Field field : fields){ if(!Modifier.isStatic(field.getModifiers())){ ID id = field.getAnnotation(ID.class); if(null != id){ sqlBuffer.append( field.getName()).append("=?

") ; } } } this.sqlBuffer = sqlBuffer.toString() ; } /** * 创建跟删除 * */ private void createDelete() { String tableName = getTableName() ; getFields( target.getClass() ); StringBuffer sqlBuffer = new StringBuffer() ; sqlBuffer.append("DELETE FROM ").append(tableName).append(" WHERE ") ; for(Field field : fields){ if(!Modifier.isStatic(field.getModifiers())){ ID id = field.getAnnotation(ID.class); if(null != id){ sqlBuffer.append( field.getName()).append("=?

"); param.add(readField(field)); } } } this.sqlBuffer = sqlBuffer.toString(); } protected Object readField(Field field ){ try { return FieldUtils.readField( field , target, true ) ; } catch (Exception e) { throw new RuntimeException( currentType.name() ,e ) ; } } /** * 创建跟新语句 * */ private void createUpdate() { String tableName = getTableName() ; getFields( target.getClass() ); StringBuffer sqlBuffer = new StringBuffer() ; sqlBuffer.append("UPDATE ").append(tableName).append(" SET ") ; for(Field field : fields){ if(!Modifier.isStatic(field.getModifiers())){ ID id = field.getAnnotation(ID.class); if(id == null){ sqlBuffer.append( field.getName()).append("=?

") ; param.add( readField(field) ) ; }else{ idName = field.getName() ; idValue = readField(field) ; } } } if(idName == null){ throw new RuntimeException( "not found of " + target.getClass() + "'s ID") ; } sqlBuffer.append(" WHERE ").append(idName) .append("=?") ; param.add( idValue ); this.sqlBuffer = sqlBuffer.toString() ; } /** * 依据注解获取表名 * */ private String getTableName() { String tableName = null ; Class<?> clazz = target.getClass() ; tableName = getTableNameForClass(clazz); return tableName ; } private String getTableNameForClass(Class<?

> clazz) { String tableName; Table table = clazz.getAnnotation(Table.class) ; if(null != table){ tableName = table.name() ; if("".equalsIgnoreCase(tableName)){ tableName = clazz.getSimpleName() ; } }else{ tableName = clazz.getSimpleName() ; } return tableName; } /** * 创建插入语句 * */ private void createInsert() { String tableName = getTableName() ; getFields( target.getClass() ); StringBuffer sqlBuffer = new StringBuffer() ; sqlBuffer.append("INSERT INTO ").append(tableName) .append("("); for(Field field : fields){ if(!Modifier.isStatic(field.getModifiers())){ ID id = field.getAnnotation(ID.class); if(id == null){ sqlBuffer.append( field.getName()).append(",") ; param.add( readField(field) ) ; } } } int length = sqlBuffer.length() ; sqlBuffer.delete(length-1, length).append(")values("); int size = param.size() ; for(int x=0;x<size;x++){ if(x != 0){ sqlBuffer.append(",") ; } sqlBuffer.append("?") ; } sqlBuffer.append(")"); this.sqlBuffer = sqlBuffer.toString() ; } private List<Object> param = new Vector<Object>(); private String sqlBuffer; public List<Object> getParam() { return param; } public String getSqlBuffer() { return sqlBuffer; } public String getIdName() { return idName; } public Object getIdValue() { return idValue; } List<Field> fields = new Vector<Field>() ; protected void getFields(Class<?> clazz){ if(Object.class.equals(clazz)){ return ; } Field[]fieldArray = clazz.getDeclaredFields() ; for(Field file : fieldArray){ fields.add( file ); } getFields(clazz.getSuperclass()); } @java.lang.annotation.Target(value={java.lang.annotation.ElementType.TYPE}) @java.lang.annotation.Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Table { String name() default ""; } @java.lang.annotation.Target(value={java.lang.annotation.ElementType.FIELD}) @java.lang.annotation.Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface ID{ } }

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
最常用的Linux命令
查看>>
MVC+Ninject+三层架构+代码生成 -- 总结(四、數據層)
查看>>
python之XML文件解析
查看>>
白盒测试实践-任务完成
查看>>
vue el-form鼠标事件导致页面刷新解决方案;vue 阻止多次点击提交数据通用方法...
查看>>
java List集合中contains方法总是返回false
查看>>
java遍历的优化
查看>>
Oracle PL/SQL编程学习笔记:Merge方法的使用
查看>>
首例利用智能路由网关犯罪嫌疑人被捕:罪名流量劫持
查看>>
css3之 渐变
查看>>
MongoDB给数据库创建用户
查看>>
ios开发日记- 5 屏幕截图
查看>>
iOS开发笔记-两种单例模式的写法
查看>>
生成.a文件步骤
查看>>
雷达扫描动画
查看>>
[转]C++11 随机数学习
查看>>
timesten 修改最大连接数
查看>>
weblogic域,管理服务器,受管服务器,集群和机器的基本知识
查看>>
mouseover与mouseenter,mouseout与mouseleave的区别
查看>>
Python---内置函数
查看>>