java 产生的固体物的基础上 增删改的SQL声明
经过多次修改。最后版本。
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{
}
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
java 产生的固体物的基础上 增删改的SQL声明的更多相关文章
- MVC3+EF4.1学习系列(二)-------基础的增删改查和持久对象的生命周期变化
上篇文章中 我们已经创建了EF4.1基于code first的例子 有了数据库 并初始化了一些数据 今天这里写基础的增删改查和持久对象的生命周期变化 学习下原文先把运行好的原图贴来上~~ 一.创建 ...
- MVC 基础和增删改、登录
一.什么是MVC?1.了解MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: Model(模型)表示应用程序核心 ...
- week_one-python基础 列表 增删改查
# Author:larlly #列表增删改查#定义列表name = ["wo","ni","ta","wo"] #定义 ...
- Java对象转JSON时如何动态的增删改查属性
1. 前言 日常开发中少不了JSON处理,少不了需要在JSON中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON字符串增加额外字段 假如我们有这样结 ...
- SSM-MyBatis-02:Mybatis最基础的增删改查(查全部和查单独一个)
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 继续上次的开始,这次记录的是增删改查,上次重复过的代码不做过多解释 首先先创建mysql的表和实体类Book ...
- Hibernate第一个程序(最基础的增删改查) --Hibernate
本例实现Hibernate的第一个程序,Hibernate的优点我想大家都很清楚,在这里不做过多赘述.总之,使用Hibernate对数据库操作,也就是来操作实体对象的! 项目目录: 一.第一步要做的就 ...
- 纯Java JDBC连接数据库,且用JDBC实现增删改查的功能
Java JDBC连接数据库 package cn.cqvie.yjq; import java.sql.*; /** * 注册数据库的驱动程序,并得到数据库的连接对象 * @author yu * ...
- Django之model基础(增删改查)
一.ORM 映射关系 表名 <-------> 类名 字段 <-------> 属性 表记录 <------->类实例对象二.创建表(建立模型) 在创建表之前的准备 ...
- Java Web项目案例之---登录注册和增删改查(jsp+servlet)
登录注册和增删改查(jsp+servlet) (一)功能介绍 1.用户输入正确的密码进行登录 2.新用户可以进行注册 3.登录后显示学生的信息表 4.可以添加学生 5.可以修改学生已有信息 6.可以删 ...
随机推荐
- 理解cookie的path和domain属性(转)
今天在做验证码时发现一个问题:A.B窗口都打开同一个页面,A先生成一个验证码,B再生成验证码,这时A所生成的验证码被B覆盖掉了.原因是使用了同名的cookie来存储验证码.一时找不到解决方法就参考了W ...
- 雷人的一幕:国外的codeproject论坛竟有人发“中文贴”.....
潜水近一年,头一次见国人在此发“中文贴”,截图留个“纪念”....
- eclipse 于 Tomcat于 热部署 project
eclipse在 Tomcat中热部署project 1.在eclipse中国安装一个tomcat插件:SysdeoEclipse Tomcat Launcher plugin(http://www. ...
- easyui DateTimeBox OK
一.datetimebox ok按钮没有点击事件,但是可以通过onSelect事件模拟出“点击了ok按钮一样的效果”,我的代码: 关键: 0,理解DateTimeBox控件,这个控件是由DateB ...
- java序列化是什么和反序列化和hadoop序列化
1.什么是序列化和系列化DE- 神马是序列化它,序列化是内存中的对象状态信息,兑换字节序列以便于存储(持久化)和网络传输.(网络传输和硬盘持久化,你没有一定的手段来进行辨别这些字节序列是什么东西,有什 ...
- 无法识别的属性“targetFramework”。请注意,属性名是大写和小写。错误的解决方案
"/CRM"应用server错. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查以下的特定错误具体信息并适当地改动配置文件. 分析器错误消息: 无法识别的属性 ...
- NET 项目结构搭建
NET 项目结构搭建 我们头开始,从简单的单项目解决方案,逐步添加业务逻辑的约束,从应用逻辑和领域逻辑两方面考虑,从简单的单个项目逐步搭建一个多项目的解决方案.主要内容:(1)搭建应用逻辑和领域逻辑都 ...
- Java反射探索研究(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankakay 摘要:本文详细深入讲解是Java中反射的机制,并介绍了如何通过反射来生成对象.调用函数.取得 ...
- Android程序猿学习路径
而一些工作,而不仅仅是通信毕业生,很多学生没有工作或熟练Android工作人员指导的情况下,,如何学习Android而提高Android更多关注的水平. 享: 1.Android知识 1.1.站点资源 ...
- Gradle cookbook(转)
build.gradle apply plugin:"java" [compileJava,compileTestJava,javadoc]*.options*.encoding ...