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.可以删 ...
随机推荐
- iOS_ScrollView的自己主动布局
ScrollView的自己主动布局稍显麻烦.但也是有规律可循, 下面就是仅竖向滑动的scrollView加入约束的固定做法 1.在控制器的view加入一个label.取名做anchor 2.给anch ...
- Linux内核的同步机制---自旋锁
自旋锁的思考:http://bbs.chinaunix.net/thread-2333160-1-1.html 近期在看宋宝华的<设备驱动开发具体解释>第二版.看到自旋锁的部分,有些疑惑. ...
- cisco(思科)交换机配置篇【两】
上一页大家津津乐道cisco基本操作命令开关,而端午假期,该cisco简单的开关配置,并希望请您分享"端午节快乐"!Ok,配置交换机,首先,你必须进入全局配置模式Switch,在成 ...
- WITH AS
表 id pid name获取 下面所有的子节点
- 《Head First 设计模式》学习笔记——迭代模式 + 组合模式
迭代模式设置共生死亡,一般来说.我们只是想实现一个集,我们需要的同时提供这个集合的迭代器,喜欢java中间Collection.List.Set.Map等,这些集合都有自己的迭代器.假如我们要实现一个 ...
- HDU1237 简单的计算器 【堆】+【逆波兰式】
简单的计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 十大经典数据挖掘算法(9) 朴素贝叶斯分类器 Naive Bayes
贝叶斯分类器 贝叶斯分类分类原则是一个对象的通过先验概率.贝叶斯后验概率公式后计算,也就是说,该对象属于一类的概率.选择具有最大后验概率的类作为对象的类属.现在更多的研究贝叶斯分类器,有四个,每间:N ...
- Spring HTTPInvoker原理猜想(HTTP+序列化)
没有查看源码,仅作参考 实现步骤: 一,客户端 (1),远程调用信息封装为远程调用对象 (2),序列化写入到远程调用HTTP请求中 (3),向服务器发送 (4),服务器端返回的HTTP响应结果 (5) ...
- MATLAB描绘极坐标图像——polar
polar可用于描绘极坐标图像. 最简单而经常使用的命令格式:POLAR(THETA, RHO) 当中,THETA是用弧度制表示的角度,RHO是相应的半径. 例: a=-2*pi:.001:2*pi ...
- 公钥\私人 ssh避password登陆
相关概念以前见过,决不要注意,使用公共密钥管理之前,腾讯云主机的备案机,非常头发的感觉,查了一下相关资料,这里总结下: 字符a:192.168.7.188 (ubuntu) 字符b:192.168.7 ...