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.可以删 ...
随机推荐
- App如何选择移动广告平台的开发者3 - 选择标准广告平台
App开发公司.通常他们不能走品牌.要挑品牌的能力,我们将面临两大问题:业务团队.广告填充率.一系列的问题,以现金周期. 无线商务本才刚刚开始,大多数都是没有商业经验.产品.设计.运营.销售的人才都不 ...
- hdu5384(trie树)
hdu5384 给定n个字符串Ai 给定m个字符串Bi 问所有的Bi在每个Ai中出现了多少次 很显然,对Bi建Trie图,然后每次用Ai去匹配的时候,不断查找当前匹配串的最长后缀,这样就能找到答案了 ...
- java获取指定地址图片高度宽度简单代码
package com.test; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.In ...
- Android数据存储——SQLite数据库(模板)
本篇整合Android使用数据库,要保存一个实体类的样本. 首先看一下数据库语句: ORM:关系对象映射 添加数据: ContentValues values = new ContentValues( ...
- 关于读style元素定义样式表兼容性
<span style="font-size:18px;"></span><pre name="code" class=" ...
- Facebook Asynchronous Layout and Rending
Facebook Asynchronous Layout and Rending by 吴雪莹 dispatch_async(backgroundQueue, ^{ storyNode = [[FBS ...
- C++写一个简单的解析器(分析C语言)
该方案实现了一个分析C语言的词法分析+解析. 注意: 1.简单语法,部分秕.它可以在本文法的基础上进行扩展,此过程使用自上而下LL(1)语法. 2.自己主动能达到求First 集和 Follow 集. ...
- Ubuntu下安装KDE及安装中文环境
进入Ubuntu的默认安装的桌面后打开终端,输入 sudo apt-get install kubuntu-desktop 回车后输入密码接下来提示下载KDE需要多少空间,解压后需要多少空间,询问是否 ...
- CSDN挑战编程——《金色十月线上编程比赛第二题:解密》
金色十月线上编程比赛第二题:解密 题目详情: 小强是一名学生, 同一时候他也是一个黑客. 考试结束后不久.他吃惊的发现自己的高等数学科目竟然挂了,于是他果断入侵了学校教务部站点. 在入侵的过程中.他发 ...
- twrp 2.7.0 ui.xml简单分析,布局讲解,第一章
twrp 的ui.xml文件在bootable/recovery/gui/devices/$(DEVICE_RESOLUTION)/res目录里面 下面我主要分析的是720x1280分辨率的界面布局及 ...