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.pswp.cn/news/258554.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258554.shtml
英文地址,請注明出處:http://en.pswp.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…