带你实现简易的JDBC封装
在我们常规的jdbc操作中,代码冗余问题非常严重,所以我们就想将jdbc六部曲的操作进行封装处理,这样可以我们的操作更方便、简捷。
演示新增操作:假设我们有一个关于Car信息的数据表,表中有汽车id、汽车名称、汽车颜色、汽车价格,我们此时需要做一个新增操作,我们自己通过Scanner输入要存储的信息,将这些信息写入到数据库中,而问题来了,我们自己手动输入的信息要保存在哪里呢,数组?不行,存是好存但是不方便取用,存了是为了在将数据写入数据库时 取 用;集合?不行,依然不好取用,domain实体对象,这个可以,我们在存值时,通过有参构造方法将我们手动输入的值存到属性中,在做数据库写入时,由于属性是私有的,所以我们通过getXXX()方法取到属性值。
1.0 版:引入依赖、加载驱动、创建连接、创建命令行对象、执行SQL、各种关闭。 缺点:每一次做CURD操作,都要重新写一遍六部曲操作,而每一次的六部曲操 作中,只有SQL语句不同,于是就有了2.0版
2.0 版:将SQL语句作为参数传递给CURD操作方法,这样每一次新的操作只需要更改SQL语句即可,但是依然存在很大的问题,1.0版和2.0版都存在SQL注入问题,非常的不安全,所以就有了3.0版。
3.0 版 :通过采用预处理方式解决SQL注入问题,通过传递参数数组为预处理中的" ?"赋值,操作如下,Parma数组中装有参数数据,通过pstst.setObject()方法为"?"赋值。for(int i = 0;ik1){ //判断"#{"和"}"的索引位置是否获得到了 String key = sql.substring(k1+2,k2); //通过subString将#{key}中的key截取出来 builder.append(key); //截取出来后,拼接到事先准备好的builder字符串中 builder.append(","); //key1于key2之间用逗号隔开 if(k2 得到getxxx方法,从而通过getxxx方法得到对应的属性值 public Object[] getParmaValue(Object parma,String []keys){ Object[] parmaValue = new Object[keys.length]; //将通过getxxx()方法得到的属性值存入数组中 for(int i = 0;i< keys.length;i++){ //keys[0]---->cname String methodName = "get"+keys[i].substring(0,1).toUpperCase()+keys[i].substring(1); //get + C + name,通过循环,参考SQLInfo中 key 数组得到,属性对应的getxxx()方法 System.out.println(methodName); //打印输出获取到getxxx名字 Class clazz = parma.getClass(); //得到Parma类的类映射 try { Method method = clazz.getMethod(methodName); //通过反射机制操作Parma中的方法,----->getxxx()方法 Object key = method.invoke(parma); //执行getxxx()方法 parmaValue[i] = key; //并将得到的属性值存到事先创建的数组中 } catch (Exception e) { e.printStackTrace(); } } return parmaValue; //返回含有属性值的数组 }
通过SQL处理器,我们将getXXX()方法通过程序装入到了数组中,接下来我们就可以执行CURD操作了。public void inserttext(String sql, Car car){ //调用处理器中的SQL语句处理方法 SQLProcessor processor = new SQLProcessor(); //通过处理得到jdbc认识SQL语句和#{key}中的key值 SQLInfo info = processor.getSql(sql); //通过找到的key值,得到相应的getxxx()方法,并存入数组中 Object[] method = processor.getParmaValue(car,info.getKeys()); //执行sqlSession类中的新增方法 sqlSession session = new sqlSession(); //将处理好的SQL语句和装好的数组交个jdbc,做新增操作 session.insert(info.getSql(),method); }
稳了!vivo新机曝光,天玑9000自研芯片,网友堆料最猛旗舰机稳了!vivo新机曝光,天玑9000自研芯片,网友堆料最猛的旗舰机本文原创,禁止搬运和抄袭,违者必究!导语大家对于所谓的品牌旗舰机的最大感受,或许就只剩下大同小异的各种堆料了。没错
再上热搜!拼多多被砍一刀反噬,未来会如何?摘要2021全年数据会如何(欢迎关注杠杆游戏)撰文张银银拼多多砍价相关活动,应该是诸多消费者眼里非常心塞的活动之一,因为成功率太低了,规则透明度亦存疑,常常被怀疑虚假等。刚刚过去的
注意!闲鱼APP上阿里拍卖的套路,切莫被骗取违约金在闲鱼APP上想购买一款二手手机,然后刷到了一款苹果12在进行拍卖。拍卖为普通拍卖,从图片直观的表现来看,手机的成色很新。于是交了100元的保证金参与竞拍。心想参与竞拍出出价,看能
玩转闲鱼实战篇前期准备连更了两天,好多小伙伴肯定已经着急了,怎么还不更新一点儿干货呀,不要着急,心急吃不了热豆腐,以后都是干货,拿出笔拿出本,做好笔记哦。今天咱们说说,在开始闲鱼之前做的准备工作,首先要
特斯拉Model概念机一出手就是王炸,给iPhone13好好上一课?来源骚客数码外界一直传闻苹果要造电动车,甚至连计划表都出来了,预计在2025年发布第一台苹果电动车。而造电动车的特斯拉一直也在传闻要造手机,作为硅谷目前最有创新的企业,伊隆马斯克或
薇娅的台前与幕后提到电商主播薇娅你有什么印象?是直播间常说的那句54321!上链接!还是她总能推荐心水好物,让人忍不住买买买所有人看到的都是镁光灯下光鲜亮丽的薇娅,但很少有人了解过,她的背后是什么
应该如何选择十倍股票电动车和光伏下的最优解电动车4万亿的特斯拉pk掉所有燃油车市值总和,带着蔚来理想小鹏等一众小弟突飞猛进,1。2万亿的宁德时代催生了无数千亿市值正负极隔膜电解液,几十倍涨幅的恩捷股份
双11成交额崇拜可休矣贺俊双11决战已经鸣金收兵。各大电商平台品牌商家的战绩将陆续出炉,极有可能再创新高。不过,历经多年的第1分钟以X元打破纪录第1小时以X元打破纪录第N小时打破去年全天纪录等时间轴战报
无线路由器Wifi信号弱怎么办无线Wifi已经成为人们生活必不可少的一个部分,很多的电子设备都可以使用wifi,比如手机,笔记本电脑,平板电脑等。所以现在越来越多人在家中会通过路由器架设自己的wifi,也常常有
揭秘怎么从华为外包跳槽到华为?大家好,我是外包界的包大人。关注我,多点赞!分享职场经验,传播职场文化,带你了解更多IT软件行业知识!相信很多从事华为外包的小伙伴们,都怀揣着一颗成为华为正式员工的心。从外包到华为
小米12mini下月发布,6。3寸小屏骁龙898,卖3000应该很有市场小米昨天官方暗示,将推出mini系列的小屏旗舰机型,小屏机型性能不减,将搭载高通旗舰机芯片骁龙898,这将是小米的另一种尝试,将和iPhonemini系列证明对抗争夺市场。随着现在