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.可以删 ...
随机推荐
- Linux下多线程查看工具(pstree、ps、pstack) (转)
1. pstree pstree以树结构显示进程$ pstree -p work | grep adsshd(22669)---bash(22670)---ad_preprocess(4551)-+- ...
- Android在Context详细解释 ---- 你不知道Context
...
- C语言程序代写(qq:928900200)
1cs3157 – Advanced ProgrammingSummer 2014, Project 1, 150 pointsJune 17, 2014Follow these step-by-st ...
- Oracle SQL Lesson (7) - 使用子查询
使用子查询简单子查询SELECT select_listFROM tableWHERE expr operator (SELECT select_list FROM table);子查询可以出现在se ...
- HDU 1856 More is better(并查集+离散化)
题目地址:HDU 1856 水题.因为标号范围太大,而数据数仅仅有10w,所以要先进行离散化.然后就是裸的并查集了. 代码例如以下: #include <iostream> #includ ...
- C++程序代写实现HashSet class
C++程序代写实现HashSet class 专业程序代写(QQ:928900200) Implement a HashSet class for elements of type string.It ...
- Sublime Text 3 最性感的编辑历史
↑ ↑ ↑ ↑ ↑ 请参阅文件夹 ↑ ↑ ↑ ↑ ↑ 下载 / 装 windows / MAC OS 官网下载.双击安装,这个都会吧- linux linux下安装.一种办法是从官网下载 tar.bz ...
- 基于Spring + Spring MVC + Mybatis 高性能web构建
基于Spring + Spring MVC + Mybatis 高性能web构建 一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJs,做了大量的研究,对前后端交互 ...
- pdf转换为word小工具,挺好
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFwZW5nMDExMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- UVA - 12001 UVa Panel Discussion
Description UVa Panel Discussion The UVa online judge team is arranging a panel discussion for the ...