java 根据实体对象生成 增删改的SQL语句
来源:互联网 发布:设计师个人主页源码 编辑:程序博客网 时间:2024/05/10 08:14
经过多次修改后,最终版本。
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{}}
0 1
- java 根据实体对象生成 增删改的SQL语句
- java 根据实体对象生成 增删改的SQL语句 ModelToSQL
- mybatis mapper.xml数据库映射生成java实体,增删改查sql语句
- codeTool代码自动生成工具(参数类sql数据增删改查语句,实体类,接口代码)
- sql增删改语句
- 反射+注释,根据实体类对象生成SQL语句工具类
- Java反射机制根据实体生成SQL
- SQL Server快速生成SQL增删改查语句
- SQL语句增删改表的字段
- SQL语句的增删改查
- sql 语句的增删改差
- sql的增删改查语句
- Mysql 表的增删改sql语句
- SQL语句的增删改查
- 增删查改的sql语句
- SQL语句的增删改查
- 执行SQL语句的增删改查
- sql语句的增删改查
- 1的补码和2的补码
- Android多媒体学习十二:Android中Video的三种播放方式的实现 .
- hadoop1.1.2java操作hdfs
- 关闭rpmbuild 对jar包的repackage 操作
- 黑马程序员_JAVA_面向对象(四)
- java 根据实体对象生成 增删改的SQL语句
- Repeater循环显示图片 4行3列
- Linux_Oracle10 下载安装
- Hive的数据倾斜和各种吐槽
- 一次失败的PHP扩展开发之旅
- 成绩处理
- hdu 4786 Fibonacci Tree
- C++ 获取文件的大小
- autoconf 简介