带你实现简易的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); }
中国移动的iptv为什么一楼和六楼不给安装?iptv为什么一楼和六楼不给安装?我作为一名运营商人说说自己的理解。IPTV是什么?发展优势有什么?IPTV也就是交互式网络电视,主要是利用移动的有线宽带网络,集互联网多媒体通讯等
苹果111213哪个性价比好?感谢邀请苹果111213哪个性价比好?实际就平时体验来说iPhone11我觉得确实完全足够,因为我个人确实也是iPhone的使用者,我们的情况应该是相差不多的。很少玩游戏,就是平时
纳米限域催化链接国家自然科学奖一等奖纳米限域催化中国科学院大连化学物理研究所包信和团队提出纳米限域催化概念,系统阐明了催化活性中心构建原理和动态演变规律,在此理论指导下,将界面限域与孔道限域耦
区块链共识机制之POS和DPOS工作量证明算法作为区块链第一个也是目前经受住足够实践检验的一个共识机制,解决的是分布式系统交易信息一致性的问题,在一个去中心化的网络中构建了彼此不信任节点的信任机制,也是比特币成功
java好用工具类一箩筐java好用工具类一箩筐可修改原始类型对象引用包装类单线程MutableIntMutableLongMutableObject,便于一个方法修改参数lamda表达式中引用并修改多线
百姓点题直播带货多带好货直播带货多带好货网友路遥知马力在天山网微信公众号留言现在网购很普遍,吃的喝的穿的用的都能一键到家,但我发现在直播间里买的东西,质量总是不尽如人意,找商家协商也不顺畅,希望相关部门能
马斯克用一张图拜年水墨老虎搭中国红外国网友送祝福来源海外网海外网1月31日电1月31日,虎年新春来临之际,美国特斯拉首席执行官埃隆马斯克在微博向中国网友送出新春祝福。31日下午,马斯克在微博及社交平台推特上同时发布一张图片,图中
腾讯内测语音软件Echo,对标DiscordYY等游戏开黑平台IT之家1月31日消息,IT之家网友发现,腾讯近日内测了一款名为Echo的语音软件,可创建私密语音房间,看起来像是对标国外火热的Discord,目前支持网页端和PC客户端。官网地址
明天起,这些新规将正式实施2月1日起一批新规正式实施对生活有哪些影响?一文速览超100万用户网络平台运营者赴国外上市须申报网络安全审查国家互联网信息办公室等十三部门联合修订了网络安全审查办法,2月15日起施
20。五种图像分类网络结构代码(基于PP深度学习框架)在20。卷积神经网络的图像分类花卉分类项目实现一文中,只给出了LeNet网络结构代码。本文提供五种图像分类的网络结构代码。图像输入大小2242243一LeNet定义LeNet网络结
JAVA新特性的入场券函数式接口从Java8的新特性说起说到Java中的函数式编程,就不得不说到Java8中引入的lambda表达式streamAPI等特性。它们与函数式接口一起支撑起了Java的函数式编程。函数