反射之动态拼接sql字符串「建议收藏」

反射之动态拼接sql字符串「建议收藏」反射之动态拼接sql字符串前言自己在学习JDBC连接数据库,不用框架手动实现时,个人觉得反射动态拼接sql的思想很好,当然了大家伙觉得好才是真的好(广州好迪,手动狗头),所以才有了本文对该知识点梳理与总结。分享给大家,下面开始步入文章的正文,亲们不要掉队。正文…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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

前言

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

正文

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

在这里插入图片描述

具体实现步骤

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

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

  • 如何实现动态sql语句的拼接
    重点来了搬好小板凳坐好!
    在这里插入图片描述

小小脑袋讲故事给大家听

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

公式 sql = sqlSentence + sqlResult

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

Jetbrains全家桶1年46,售后保障稳定

接下来就是反射原理地实现了(不得不说反射真的很强大),从反射的百宝箱里面找到了两个工具: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!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234741.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 第2章 数据库关系模型—数据库原理及应用

    第2章 数据库关系模型—数据库原理及应用第2章数据库关系模型作业常用的关系查询操作包括选择、投影、连接、并、交等。v 实体完整性是指关系表的属性组成必须是完整的。x 自然连接是一种等值连接。v 在参照完整性中,可以定义级联操作。v 用户自定义完整性可以实施数据的业务约束。v 每个关系是一个二维表,但二维表不一定是关系。v 关系中复合键至少包含两个属性。v 代理键是为了唯一标识关系的不同元组,需要在表单或报表中显示…

    2022年7月16日
    18
  • IDEA2021.8.3激活码(注册激活)

    (IDEA2021.8.3激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月26日
    51
  • IDEA2021.5.1-2038激活码激活【在线注册码/序列号/破解码】「建议收藏」

    IDEA2021.5.1-2038激活码激活【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    54
  • java xsd解析_java dom4j解析XSD文件

    java xsd解析_java dom4j解析XSD文件1 用 DOM4J 解析 XSD 文件 找出 XSD 文件中所有的 element type 的定义 xsd 文件有 4W 多行 最终找出的结果是 element 和 type 定义有 6000 多个 2 递归找出指定 type 所用到的所有关联的元素 其中有用到 XPATH 来查找结点根据 type 在 xsd 文件中查找 找到有 type 和 element 是自定义的就递归下去继续往下找 直到找到最后所有的 type 和 element 都是 XSD 自带

    2025年8月2日
    5
  • shell循环生成连续日期

    shell循环生成连续日期1,给定长度,循环生成日期begin_day=-5end_day=0for((i=${begin_day};i<=${end_day};i++));do day=`date-d”${i}days”+”%Y%m%d”` echo${day}done输出为:2020082520200826202008272020082820200829202008302,给定开始日期和结束日期,循环生成日期。begin_day=”20200801″end_day=”2020

    2022年7月24日
    5
  • 红黑树与平衡二叉树_理解红黑树很难?不存在的,史上最详细的红黑树图解

    HashMap的实现原理可以说是面试中必问的一道面试题了,它可以考察一个程序员的数据结构功底和对技术的钻研深度。Java7中HashMap的实现就是一个数组,然后数组中的每一个元素又是一个链表,这个链表的存在是为了解决哈希冲突导致的问题,就是一个元素经过哈希计算后得到元素的存储位置,但是这个位置已经有其它元素占领,也就是占领元素和新插入元素都在这个数组中的同一个位置,此时就用链表进行维护…

    2022年4月4日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号