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.可以删 ...
随机推荐
- String,StringBuffer以及StringBuilder的差别
1.定义: String:String 类代表字符串. Java 程序中的全部字符串字面值(如"abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改. 字符 ...
- Oracle外键(Foreign Key)使用详细的说明(一)
Oracle外键(Foreign Key)使用详细的说明(一) 1.目标 演示如何Oracle使用外键数据库 2.什么是外键? 1)在Oracle数据库中,外键是用来实现參照完整性的方法之中的一个.打 ...
- Python3.4 邮件(包含附件与中国)
import smtplib import os from email.mime.text import MIMEText from email.mime.multipart import MIMEM ...
- Android规范发展
一.Android 编码规范 1.java 代码中不出现中文.最多凝视中能够出现中文 2.局部变量命名.静态成员变量命名 仅仅能包括字母,单词首字母出第一个外,都为大写,其它字母都为小写 3.常量命名 ...
- 清除Android工程中没用到的资源(转)
项目需求一改再改,UI一调再调,结果就是项目中一堆已经用不到但却没有清理的垃圾资源,不说工程大小问题,对新进入项目的人或看其他模块的代码的人来说,这些没清理的资源可能也可能会带来困扰,所以最好还是清理 ...
- 设计模式——工厂模式(Factory)
要想正确理解设计模式,首先必须明白它是为了解决什么问题而提出来的. 设计模式学习笔记 --Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 1.概念 工厂模式定 ...
- 主机Window不能访问该虚拟机Linux Samba文件服务提供了一个文件夹
我最近遇到一个问题.虚拟机Linux中间Samba服务常开.主办"\\192.168.229.200" (我的虚拟机Linux址)訪问不了Share文件夹(/var/test),并 ...
- Android多线程的研究(8)——Java5于Futrue获取线程返回结果
我们先来看看ExecutorService操作的方法: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3YW5nYW5iYW4=/font/5a6L5 ...
- [MSSQL]最小公约数
[摘要]一个朋友在展BOM的时候有这种需求,两列字段(数值):A ,B A=用量,B=底数,组成用量=用量/底数.A/B,若能被整除,显示整除的结果,若不能整除显示分数形式A/B(分数形式要是约分 ...
- Linux/UNIX流程关系
流程关系 过程组 除了一个过程,每个过程ID此外.也属于一个进程组.过程基是一个或多个过程的集合. 通常它们与相同的作业相关联,它接受各种信号从相同终端. #include<unistd.h&g ...