反射之动态拼接sql字符串的实现

前言

自己在学习JDBC连接数据库,不用框架手动实现时,个人觉得反射动态拼接sql的思想很好,当然了大家伙觉得好才是真的好(广州好迪,手动狗头),所以才有了本文对该知识点梳理与总结。分享给大家,下面开始步入文章的正文,亲们不要掉队。
(嘘~看这里:使用的开发工具是IDEA哦)

正文

首先带领大家理解一下我的思路,遥想当时我想了几个小时不知如何下手,无所事事敲键盘,未曾想用最简单的方式反而有了结果。

具体实现步骤

  • JDBC连接数据库
  • 根据数据库表中字段创建实体类

亲们,上面这两步我就不说了,不是本文的重点不做说明,有时间会总结JDBC连接数据库。

  • 如何实现动态sql语句的拼接
    重点来了搬好小板凳坐好!

小小脑袋讲故事给大家听

我是小朋友望舒,在很久很久以前,我的梦想是实现动态拼接sql,既然动态拼接,我就要有东西来存放它,那就整两条String(字符串)(不妨给他们起名sqlSentence,sqlResult)把他们拼接成sql来展现我拼接后的字符串。不用多久,我就会升职加薪、当上总经理、出任CEO、迎娶白富美、走上人生巅峰,想想还有点小激动…)

公式 sql = sqlSentence + sqlResult

         String sqlSentence = "";String sqlResult = "";

接下来就是反射原理地实现了(不得不说反射真的很强大),从反射的百宝箱里面找到了两个工具:getClass()[获得类]、getSimpleName()[获得类的名字],拿着他俩去我家后院一顿操作:

        Class<?> aClass = webpage.getClass();String table = aClass.getSimpleName();

我发现了后院(数据库中的)里的神奇宝物(webpage表,实际就是实体类!) 把他们sout(懂得都懂,不懂得问我)一下就是这个东东

隐隐约约看见宝物上印着一幅画~~ 喏,就是这个(毫无保留展示给亲们)

差点以为自己的梦想实现了,却发现自己要找的东西还没有出现。于是我又拿出了百宝箱的另外两件工具getDeclaredFields()[获得某个属性对象]、getName()[获得类的完整路径名字];用它们探索宝物的奥秘!

Field[] fields = aClass.getDeclaredFields();String s1 = "";String v1 = "";for (Field f : fields) {f.setAccessible(true);if (f.get(webpage)==null){return;}else{sqlSentence = sqlSentence + f.getName() + ",";f.setAccessible(true);sqlResult = sqlResult + "'" + f.get(webpage) + "'" + ",";}}

(这里我解释一下:上面几行代码原理很简单,如果字段不为空就通过反射拿到实体类属性,换句话说就是拿到数据库表中字段,然后用foreach循环遍历出来,并用单引号" ’ “和” , "隔开就达到了下面这样的效果)

我拿出我的✂[substring()方法]把后面多余的逗号剪掉就会更好看一点,给我的✂亮个相,不要嫌它丑

            sqlSentence = sqlSentence .substring(0, s1.length() - 1);sqlResult = sqlResult .substring(0, v1.length() - 1);

我在院子里跑累了,就打算躺下来休息休息,随手把它们(sqlSentence,sqlResult)放在了床边,我就昏昏欲睡了。。。。。。
不知睡了多久,刹那间一道强光闪现,我揉了揉睡眼惺忪的眼睛— —没错 宝物合二为一了!梦想实现了!!(幸福来得太突然,一时间竟不知所措)

            String sql = "insert into " + table + "(" + sqlSentence + ") values (" + sqlResult + ")";System.out.println(sql);

打印在控制台如下


自此,有了这件宝物望舒过上了愉快幸福的996生活~~~
完结!撒花!!!

结语

故事讲完了,第一次尝试着用这种方式来描述问题,还请大家多多指正。
我是望舒,Salute!!!

反射之动态拼接sql字符串相关推荐

  1. mysql存储过参数拼接_mysql 存储过程动态拼接sql并执行赋值

    CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`(in _xnb varchar(50)) BEGIN ## 定义变量 DECLARE _num FL ...

  2. BIRT 中如何根据参数动态拼接 SQL

    BIRT可以使用sql query来创建数据集,通过在报表中设置参数(Parameter)来传递客户端的用户输入,同时可以设置Dataset参数并且与报表参数关联(这两个参数是不同的),这样可以将客户 ...

  3. Excel拼接sql字符串

    以Excel中的列作为值,拼接sql字符串,如下截图案例: 说明: 1.选中D2,然后在Fx中编写字符串拼接函数,字符串之间的链接使用&符号拼接,字符串部分使用双引号引起来. 2.选中D2然后 ...

  4. 代码中(C#)支持动态拼接SQL的参数化查询

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.D ...

  5. mysql limit 动态参数_MySQL中limit使用动态参数的解决方法(拼接SQL字符串语句来执行SQL)...

    官方好像说过limit已经在5.6版本上支持了动态参数,但是测试时依然还是不行. 那么要解决limit动态参数唯一能做的就是使用字符串SQL拼接的形式,然后再进行执行. 一般有以下方式解决: 1.存储 ...

  6. MyBatis动态拼接SQL

    通过使用MyBatis提供的标签方法可以实现动态SQL拼接 1.if标签 <include refid="temp_sql"></include>这里代表s ...

  7. Python拼接SQL字符串的方法

    在做接口自动化测试的时候,最为常见的是GET.POST两种请求类型的接口.对于GET请求,直接将参数写在URL后面,以"?"隔开,参数的键和值之间用"="隔开, ...

  8. excel动态拼接sql语句

    需求: 根据Excel中的一个字段的值作为条件,把对应行中的其他字段插入. 例子:表A根据id更新Name =C2&B2&D2&A2&E2   表示单元格根据值& ...

  9. ireport模块之间的动态传参及拼接SQL

    1.有些业务逻辑需要在ireport中判断.所以经常将拼接SQL的任务由Parameters的Default Value Expression来完成 ,如果有子模版,则在子模版参数里面处理,怎么将SQ ...

  10. java sql特殊字符处理_java用字符串拼接SQL语句的特殊字符转义问题

    在实际的项目开发中,往往会根据用户在界面的文本框中输入的信息,去数据库中做模糊查询.如果使用的是原始的JDBC和SQL,往往需要对用户的输入进行转义,避免生成的sql语法错误,或者防止SQL注入.比如 ...

最新文章

  1. 【翻译】Nginx的反向代理
  2. linux管理防火墙开放端口
  3. USACO section1.3 Barn Repair 修理牛棚(贪心)
  4. 东京大学计算机专业研究生好吗,东北大学计算机类研究生个人考研经历以及感受...
  5. Netty2:粘包/拆包问题与使用LineBasedFrameDecoder的解决方案
  6. exfat最佳单元大小_ICLR2019最佳论文!神经网络子网络压缩10倍,精确度还能保持不变...
  7. 关于optisystem中的变量解析
  8. Android手机怎么找回微信好友,安卓手机微信怎么找回删除的好友?专业靠谱!...
  9. 安卓桌面html便签,手机桌面便签
  10. phalapi可以依赖注入么_phalapi-进阶篇2(DI依赖注入和单例模式)
  11. 可编程计数器/定时器8253和8254
  12. java实现注册登录版五子棋对战平台(超详细注释,内含人机实现)
  13. Lync Server 2010不同规模拓扑图详解
  14. mask_rcnn keras源码跟读2)数据部分
  15. Linux下的文本网页浏览器
  16. 复星医药2020年实现营业收入人民币303亿元,同比增长6%
  17. C语言结构体指针(指向结构体的指针)详解
  18. 关于【腾讯 TEG云架构平台部( 云架平) 存储组】
  19. 【C++ 基础篇:21】:friend 友元四连问:什么是友元?友元类?友元函数?什么时候用友元?
  20. 7 Resnet深度残差网络实现102种花卉分类

热门文章

  1. VS2010设置快捷键
  2. 关于填写软件著作权申请表时源程序量总行数怎么确认的问题?
  3. 《黑客攻防技术宝典:系统实战篇(第2版)》目录
  4. 十天学会单片机(2)点亮一个发光管
  5. 【学习笔记】matlab进行数字信号处理(二)信号的相关分析及幅值分析
  6. 干货 | 嵌入式系统软件架构设计
  7. 黑客X档案的《黑客免杀入门》
  8. php模板引擎smarty案例下载,Smarty下载|Smarty(php模板引擎) v3.1.30官方版 - 121下载站...
  9. 禁用惠普服务器自动开机,惠普商用台式机如何在BIOS中设置通电自动开机
  10. [导入]一个都不能少:全面认识IE插件