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{ } }



版权声明:本文博客原创文章,博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/blfshiye/p/4675223.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSEK简介

What is OSEKA specification for an RTOS•With standard software interfaces (OS API)•Including intertask & interprocessor communication (COM)•Including network management (NM)•Including the language used to statically declare OS elements used in an a…

python中布尔型的值_在python中对于bool布尔值的取反操作

背景根据公司业务的需求&#xff0c;需要做一个对于mysql数据库的大批量更新。脚本嘛也是干干单单。使用了redis的队列做缓存&#xff0c;可以异步并发的多任务进行更新。有点难受的地方在于&#xff0c;请求访问时&#xff0c;因为一些网速&#xff0c;速率之内的原因&#xf…

门道多:一次MaxCompute PS任务的问题排查之旅

关于PS是什么&#xff0c;可以参考一下以下两个介绍&#xff1a;基于参数服务器的大规模在线学习算法和Parameter Server。更多问题可以咨询玄乐。下面主要总结一下这回遇到一个PS任务跑不起来的问题排查过程。不想看过程的直接看最后一点总结就行。一 为什么要分享一个问题排查…

源码安装Bazel

有时候我们需要源码安装tensorflow&#xff0c;这时逃不过的第一步就是安装Bazel,如果没有root权限的时候&#xff0c;这时我们就需要源码安装Bazel了。下面是安装步骤&#xff0c;参考&#xff1a;https://docs.bazel.build/versions/master/install-compile-source.html 1. E…

234. Palindrome Linked List

Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time and O(1) space? 先找到链表中点&#xff0c;将第二部分反转&#xff0c;然后比较两部分链表的值。 /** * Definition for singly-linked list. * public class ListNo…

当查找名字的时候通过外围作用域向外查找(如何理解)

int a;//#1int b;//#2namespace A{int c;//#3void fun(){int a;//#4使用(a);//从里查找已经声明名字首先寻找内层花括号之内a找#3//会继续查找使用(b);//从里查找已经声明名字//首先寻找内层花括号之内没有声明b//继续外层花括号&#xff08;namespace A&#xff09;内寻找没有…

python 服务注册_将python程序注册为Ubuntu系统服务,并开机启动的方法。

一、系统环境操作系统&#xff1a;ubuntu 18 (该版本已默认使用systemd作为init)python版本&#xff1a;3.6二、步骤(一)准备python程序1、在 /usr/bin/ 下新建python程序 svc-test.py# nano /usr/bin/svc-test.py#! /usr/bin/python3import timewhile True:f open(/tmp/svc-t…

源码安装NASM,无root权限

首先说明我的系统是redhat linux64位。没有root权限。我们想安装nasm2.13. 下面介绍具体的安装步骤。 1. 下载源码: https://www.nasm.us/pub/nasm/releasebuilds/2.13/ 选择nasm-2.13-xdoc.tar.gz下载在本地目录下 2. 解压&#xff0c;tar -xvzf nasm-2.13-xdoc.tar.gz &…

Volley简单学习使用五—— 源代码分析三

一、Volley工作流程图&#xff1a; 二、Network在NetworkDispatcher中须要处理的网络请求。由以下进行处理&#xff1a;NetworkResponse networkResponse mNetwork.performRequest(request);看一下mNetwork的定义&#xff1a;&#xff08;定义在NetworkDispatcher中&#xff0…

html5 - history 历史管理

参考文章&#xff1a; w3c : http://www.w3.org/html/ig/zh/wiki/HTML5/history 张鑫旭 : http://www.zhangxinxu.com/wordpress/2013/06/html5-history-api-pushstate-replacestate-ajax/ zawa : http://zawa.iteye.com/blog/1271031  Demo : Demo 截图&#xff…

源码安装libjpeg-turbo1.2.1,无root权限

首先说明我的系统是redhat linux64位。没有root权限。我们想安装libjpeg-turbo. 下面介绍具体的安装步骤。 本来想安装最新的版本&#xff0c;但是最后失败了&#xff0c;无奈安装成1.2.1. 1. 下载源码&#xff1a; https://zh.osdn.net/projects/sfnet_libjpeg-turbo/download…

Android开发学习---使用Intelij idea 13.1 进行android 开发

Android开发学习---使用Intelij idea 13.1 进行android 开发 原文:Android开发学习---使用Intelij idea 13.1 进行android 开发1.为什么放弃eclipse?太卡!! 实在受不了eclipse的卡了,运行WEB项目还好,但android开发实在太慢,太慢!经常卡死,CPU经常被占满! 看网上很多人都说比I…

python滑动条来设置阈值houghcircle_OpenCV Python,为什么Hough Circle Transform找不到所有圆圈?...

我搜索了很长时间可能出错但我并不真正了解参数和预处理的影响我无法发布图片,但是在一张非常清晰的欧元照片上,该程序识别出一些圈子,而不是其他一些圈子,甚至可以像其他人一样清楚.这是我的代码&#xff1a;‘$’import cv2import numpy as npfilename rC:\Users\roseline\D…

Logcat打印调试信息

Android Logcat调试中的V、D、I、W、E的分别代表什么&#xff1f; Log.v -- 黑色 -- verbose infoLog.d -- 蓝色 -- debug infoLog.i -- 绿色 -- infoLog.w -- 橙色 -- warnLog.e -- 红色 -- error info//Log.ASSERT -- 断言 //Log.wtf() (1、Log.v 的调试颜色为黑色的&#xf…

opencv中的椭圆拟合

首先贴一个最简单的程序&#xff1a;访问&#xff1a;https://blog.csdn.net/guduruyu/article/details/70069426 //创建一个用于绘制图像的空白图 cv::Mat image cv::Mat::ones(480, 640, CV_8UC3); //设置蓝色背景 image.setTo(cv::Scalar(100, 0, 0)); //输入拟合…

unix c 11

多线程(thread) 操作系统支持多进程&#xff0c;进程内部使用多线程。 进程是 重量级的&#xff0c;拥有自己 独立的内存空间。 线程是 轻量级的&#xff0c;不需要拥有自己 独立的内存空间&#xff0c;线程的内存空间&#xff1a;1 共享进程的内存空间 2 每个线程拥有…

C# .net core 使用自定义的WebProxy

为什么80%的码农都做不了架构师&#xff1f;>>> 因为.net core 的System.Net 中没有提供WebProxy这个方法,所以可以根据需求实现一个. public class CoreWebProxy : IWebProxy{public readonly Uri Uri;private readonly bool bypass;public CoreWebProxy(Uri uri,…

2015年08月

2015年07月 - 2015年09月 ● 一般而言。。。 一般而言&#xff0c;牙周病轻者有口臭、牙龈红肿疼痛、刷牙流血等症状&#xff0c;严重时会造成牙龈萎缩、牙齿敏感、牙齿摇动等情况。口腔没有在饮食后30分钟清洁就会逐渐转化为酸性环境&#xff08;PH值约5.5&#xff09;&#x…

python类汇总_Python 类总结

Python可以继承多个父类&#xff0c;多重继承。类支持多个对象的产生&#xff0c;命名空间的继承&#xff0c;运算符重载1)、类产生多个实例对象Python OOP模型中的两种对象&#xff1a;类对象和实例对象。类对象提供默认的行为&#xff0c;是实例对象的工厂。实例对象是程序处…

matlab ,python,c++关于格式化输出数字的表达

我们想要格式化输出1,2,3&#xff0c;...为001,002,003 ... 那么在matlab,python,c该如何表达呢&#xff1f; matlab: >> filedirsprintf(%03i,10)filedir 010 or >> imagenamenum2str(10,%03d)imagename 010 python: index_str %03d % 10index_str Ou…