当前位置: 首页 > 编程日记 > 正文

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



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

相关文章:

顺络新能源汽车技术研讨会圆满落幕

2021年12月11日&#xff0c;由深圳顺络电子股份有限公司主办、中国传感器与物联网产业联盟和大湾区新能源汽车产业技术创新联盟协办的新能源汽车技术研讨会在深圳汉普斯酒店隆重召开&#xff0c;广汽研究院智能网联中心总师廖磊先生、比亚迪汽车工程研究院副总工程师顾建军先生…

电信的 DNS 服务器地址

上海电信 202.96.209.5202.96.209.6202.96.209.133202.96.209.134

系统利益相关者描述案例

利益相关者 主要目标 态度 主要关注点 约束条件 厅长 监督河北省创新事业的发展 强烈支持积极推动河北省科技创新平台的建立&#xff0c;促进河北省科技创新事业的发展 如何优化管理&#xff0c;如何保证推动创新发展事业工作的高效性 无 平台主任&#xff08;院长…

CentOS6怎么样设置ADSL上网

首先安装好CentOS6以后要安装rp-pppoe这个软件&#xff0c;centos之前的版本所adsl-setup这个命令安装&#xff0c;到centos6改了。 需要光驱内放好CentOS安装盘 挂载光盘 #mount /dev/cdrom /media 找出文件路径 # find /media -name rp-pppoe* 这个文件没有依赖项&#xff0c…

小冰数字孪生主播正式上线 全球首创全流程无人化AI直播

12月20日&#xff0c;小冰公司公布全新的数字孪生虚拟人技术&#xff0c;并联合每日经济新闻&#xff0c;将首批应用该技术的虚拟主持人&#xff0c;与“每经AI电视”一同正式上线。与其他技术相比&#xff0c;小冰框架不仅将虚拟人的整体自然度提升至与真人难以分辨的程度&…

二分搜索 POJ 2456 Aggressive cows

题目传送门 1 /*2 二分搜索&#xff1a;搜索安排最近牛的距离不小于d 3 */4 #include <cstdio>5 #include <algorithm>6 #include <cmath>7 using namespace std;8 9 const int MAXN 1e5 10; 10 const int INF 0x3f3f3f3f; 11 int x[MAXN]; 12 int n,…

路由策略与策略路由的区别。

这两中方案都是为了控制网络流量的可达性或调整网络流量的路径&#xff1a; 一、路由策略。&#xff08;Route-Policy&#xff09;路由策略是通过修改路由表的路由条目来控制数据流量的可达性。即对接受和发布的路由进过滤。这种方式称为路由策略。 二、策略路由。&#xff08;…

Python 刷英语六级段落匹配仅需 3 秒?

作者 | 叶庭云来源 | AI庭云君一、前言 一年二度的四六级考试就此落下帷幕&#xff0c;本次考试体验感极强&#xff0c;反手就是一个 "五星好评"本文利用 Python 的模糊匹配方法来刷英语六级段落匹配&#xff0c;仅需要3秒&#xff01;Python的 FuzzyWuzzy 库&#x…

在自己的网站添加关注新浪关注按钮

有2种方法 第一种是参照新浪开发平台的API 地址如下&#xff1a; http://open.weibo.com/widget/followbutton.php 第二种是在html页面引入一段js <iframe allowtransparency"" border"0" frameborder"0" height"22" marginheight…

pandas中DataFrame的ix,loc,iloc索引方式的异同

pandas中DataFrame的ix&#xff0c;loc&#xff0c;iloc索引方式的异同 1、loc: 按照标签索引&#xff0c;范围包括start和end 2、iloc&#xff1a; 在位置上进行索引&#xff0c;不包括end 3、ix: 先在index上索引&#xff0c;索引不到就在index的位置上进行索引(如果index非全…

Linux crontab 命令格式

基本格式 :*  *  *  *  *  command分 时 日 月 周 命令 第1列表示分钟1&#xff5e;59 每分钟用*或者 */1表示第2列表示小时1&#xff5e;23&#xff08;0表示0点&#xff09;第3列表示日期1&#xff5e;31第4列表示月份1&#xff5e;12第5列标识号星期0&#x…

5分钟学会打游戏的活体人脑细胞,比 AI 学习速度更快

整理 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 在人工智能研究领域&#xff0c;最有前景的途径之一是尝试让软件模拟人脑的工作方式。 在两年前就有媒体报道称&#xff0c;澳大利亚生物科技初创公司 Cortical Labs 正致力于把真正的生物神经元嵌入到…

如何进行屏幕录制?

为什么80%的码农都做不了架构师&#xff1f;>>> 推荐的软件 屏幕录像专家选择avi输出&#xff0c;编码选择x264或者xvid total video converter将 avi格式转为mp4 优酷客户端也可以将 avi格式转为mp4。 狸窝全能视频转换器也可以将 avi格式转为mp4。 我使用格式工厂…

如何用ABAP代码读取CDS view association的数据

我有如下一个CDS view, 这个view的数据来自CRMD_ORDERADM_H, 定义了一个名称为_statushelp的association, 指向了另一个CDS view Z_C_Status_Valuehelp.该view暴露了两个字段STATUS_KEY和STATUS_TEXT. 现在我的需求是&#xff1a;在ABAP代码里只需要一次读操作&#xff0c;既能…

linux Crontab 使用

cron用法说明cron的用法老是记不住&#xff0c;索性写下来备忘。下文内容大部分是根据《Cron Help Guide》翻译而来&#xff0c;有些部分是自己加上的。全文如下&#xff1a;cron来源于希腊单词chronos&#xff08;意为“时间”&#xff09;&#xff0c;是linux系统下一个自动执…

iOS开发之圆角指定

如果需要将UIView的4个角全部都为圆角&#xff0c;做法相当简单&#xff0c;只需设置其Layer的cornerRadius属性即可&#xff08;项目需要使用QuartzCore框架&#xff09;。而若要指定某几个角&#xff08;小于4&#xff09;为圆角而别的不变时&#xff0c;这种方法就不好用了。…

网友抱怨:「苹果除了每年收我的钱,似乎什么都不想做」

‍‍整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;一直以来&#xff0c;苹果的开发者账号都贵得众所周知。不仅每年都要续费&#xff0c;一年费用甚至比微软和 Google 开发者账号的一次性收费还高&#xff1a;微软 MicroSoft Developer 账号&#x…

PHP最简单写文件记日志当前时间

定义和用法 fopen() 函数打开文件或者 URL。 如果打开失败&#xff0c;本函数返回 FALSE。 语法 fopen(filename,mode,include_path,context)参数描述filename必需。规定要打开的文件或 URL。mode必需。规定要求到该文件/流的访问类型。可能的值见下表。include_path可选。如果…

【MySQL笔记】mysql来源安装/配置步骤和支持中国gbk/gb2312编码配置

不久的学习笔记。分享。我想有很大的帮助谁刚开始学习其他人的 备注&#xff1a;该票据于mysql-5.1.73版本号例如 1. mysql源代码编译/安装步骤 1) 官网下载mysql源代码并解压 2) cd至源代码文件夹。运行 ./configure --prefix/home/slvher/tools/mysql-5.1.73 --with-charset…

预告|开源操作系统年度技术会议

本次会议的主会场设在麒麟软件&#xff08;北京&#xff09;&#xff0c;由于疫情原因&#xff0c;为尽量减少讲师和参会人员因疫情带来的出行不便&#xff0c;我们同时在北京、上海和深圳设置三个线下交流的分会场。 有部分讲师和圈内大咖将会在三个分会场与大家面对面交流&a…

“智享未来 知行合一”,开为科技AI产品发布会于2月6日召开

届时&#xff0c;开为科技将展示系列装有自研人脸识别算法的人工智能硬件产品&#xff0c;包括人证比对一体机、人脸识别双面闸机、人脸访客广告机等。 过去一年&#xff0c;人工智能的新闻铺天盖地&#xff0c;发展速度之快让人目不暇接&#xff0c;各大巨头纷纷布局&#xf…

linux下history(历史)命令用法详解

如果你经常使用 Linux 命令行&#xff0c;那么使用 history&#xff08;历史&#xff09;命令可以有效地提升你的效率。本文将通过实例的方式向你介绍 history 命令的15个用法。1. 使用 HISTTIMEFORMAT 显示时间戳当你从命令行执行 history 命令后&#xff0c;通常只会显示已执…

js获取当前页面的URL信息

2019独角兽企业重金招聘Python工程师标准>>> window.location属性 描述 hash 设置或获取 href 属性中在井号“#”后面的分段。 host 设置或获取 location 或 URL 的 hostname 和 port 号码。 hostname 设置或获取 location 或 URL 的主机名称部分。 href 设置或获取…

超前探秘首个国产元宇宙百度“希壤”:率先实现10万人同屏互动

12月21日&#xff0c;百度发布的首个国产元宇宙产品“希壤”正式开放定向内测&#xff0c;用户凭邀请码可以进入希壤空间进行超前体验。百度方面表示&#xff0c;12月27日“希壤”将面向所有用户开放&#xff0c;届时百度Create 2021&#xff08;百度AI开发者大会&#xff09;将…

什么是跨域?怎么解决跨域问题?

什么是跨域&#xff1f; 跨域&#xff0c;指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的&#xff0c;是浏览器施加的安全限制。 所谓同源是指&#xff0c;域名&#xff0c;协议&#xff0c;端口均相同&#xff0c;不明白没关系&#xff0c;举个栗子&#…

mysql 使用位运算

如果你不知道什么是位运算的话&#xff0c; 那么请你先去看看基础的C语言教程吧。 与运算 a & b , 或运算 a | b , 异或运算 a ^ b ,或者 你也可以将 与运算理解为 法 例如 1|2 3 &#xff08;12 3&#xff09; 1|2|4 7 &#xff08;124 7&#xff09;将 异…

轻松抓鸡蛋、剪纸、夹芯片,这只“机械爪”堪比人手!

作者 | 学术头条来源 | 学术头条如果机器手能执行与人手一样的功能&#xff0c;那在执行任务时就可拥有高度的灵活性。然而&#xff0c;在保持人手般灵巧度和抓握力等重要功能的同时&#xff0c;开发无需额外驱动部件的集成机器手是一项挑战。因为驱动部件使得这些机器手很难集…

Js_Span 滑动手型鼠标样式

<span style"cursor: pointer;">搜索</span> 为了可以更灵活控制. 使用span布局 加上滑动手型鼠标样式. 配合JS各种自定义按钮样式. ZhLingF W转载于:https://www.cnblogs.com/may26/p/4689219.html

No.6 PHP的基本配置与优化

PHP下载http://www.php.net/downloads.php安装yum -y install libxml2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel libxslt-devel gcc gcc-copenssl-develtar xf php-7.2.3.tar.bz2 -C /tmp./configure --prefix/usr/local/php --with-curl --with-freety…

php连接Mysql

<?php echo "This is a test</br>"; echo "asdfasdfadsf"; $mysql_server_name"localhost:3306"; //数据库服务器名称 $mysql_username"root"; // 连接数据库用户名 $mysql_password"rootpass"; // 连…