今天是刘小爱自学Java的第72天。
感谢你的观看,谢谢你。
话不多说,开始今天的学习:
我翻了下以前自己记的笔记,从第58天开始学习MySQL数据库,到今天已经14天了。
对于我来说,学数据库最主要的目的就是学习如何去操作数据库,也就是增删改查。
而其中牵扯到的技术就是Jdbc,翻来覆去学了好几天,无外乎就是对Jdbc的学习与优化。
现在做个回顾小结:
一、Jdbc回顾
Jdbc核心六步骤,但是每次都这样写的话太繁琐了,所以将其中第1、2、6步封装进JdbcUtil工具类。
后面通过一个sql注入的例子学习了预编译。
再尝试着自定义了一个连接池,从而更好地去学习开源连接池c3p0和德鲁伊。
同时也是对于Java中非常重要的一个知识点动态代理的再次巩固。
说白了学这些其实都在做一件事情,就是在不停地优化JdbcUtil工具类:
①Jdbc核心六步骤
这是Jdbc最基础的六个步骤。
其中第1步注册驱动,在MySQL3.0开始实现自动注册,但最好自己还是知道怎么写的好。
其中第6步释放资源,因为每次连接完需要释放资源,故将其封装进工具类,减少代码冗余。
②连接池的学习
两大开源连接池的学习,本质上其实就是对核心六步骤中的第二步(获取连接)的进一步优化。
我选择的是德鲁伊连接池,同样,将其封装进工具类JdbcUtil中。
③预编译的学习
sql注入的问题,以及预编译的引入,说白了也就是对核心六步骤中的第3、4步的优化。
预编译比常规方法更加地安全,也更有效率。
而今天要学一个小框架JdbcTemplate,准确地说,它是spring这个大框架中的一个模块。
Template,模板的意思,也就是Jdbc的一个模板。
它的出现也就是对核心六步骤中第3、4、5步的再一次优化,同时进一步简化代码,使用起来会更加地方便。
二、JdbcTemplate之增删改
翻来覆去,其实无外乎就是增删改查。
其中牵扯到,对数据表本身的增删改查,和表里的数据增删改查。
①创建JdbcTemplate对象
直接创建JdbcTemplate对象,会发现构造函数参数需要传入数据源。
在自己编写的工具类Jdbcutil中封装一个获取一个数据源的方法,然后直接获取即可。
②对数据表本身的操作:execut()
execute,执行的意思,对于数据表本身的操作(增删改查),都是用这个方法。
我们创建一个数据表student,有3列:id,name,age。
当然在Java中很少直接操作数据表本身,一般都是用于对表里数据的操作。
③对表中数据的增删改:update()
update,修改的意思,对于数据表里的数据修改(增删改在这儿都属于修改),都是用这个方法。
我们给Student表新增一条数据。
其中update方法有两个参数:一个是sql语句,一个是可变参数(也就是sql语句中预编译中的“?”)。
该方法让预编译更加地简洁了,不用我们自己设定每个“?”的具体值是多少。
如果使用常规方法的话,我们需要这样编写:
利用工具类JdbcUtil获取连接,使用预编译,然后需要逐个设定预编译中“?”的值。
所以通过对比可以发现JdbcTemplate模板使代码更加地简洁了,其底层其实就是做了这样的封装。
三、JdbcTemplate之查询
对于表里数据的增删改查中,无疑查询是最重要的存在。
这也很好理解,我们经常都需要登入各种APP各种网站,其本质就是对于数据的查询,而修改注销创建账号的频率无疑要少很多。
并且查询要复杂的多,我们画图分析:
查询的结果共有三种情况,在Java中每种情况有其对应的API:
①单行单列:queryForObject()
查询出来的结果是一个数据,所以Java中用的返回值是Objcet。
现在编写对应的代码:
queryForObject()方法有三个参数:
sql语句,查询到的数据类型对应的class对象,以及预编译中的参数。
其中第一个例子查询的是数量,所以只有前两个参数。
②单行多列:queryForMap()
查询出来的结果是一行数据,所以Java中用的返回值是Map集合。
Map集合是由key和vlaue组成,其中这行的列名就相当于key值,这一行的数据就相当于value。
代码编写如下:
queryForMap中有两个参数:
sql语句,以及预编译中的参数。
③多行多列:queryFroList()
查询出来的结果是多行数据,所以Java中用的返回值是list集合,就相当于在list集合中装了很多个Map。
其中多行单列也就是属于多行多列。
代码编写:
返回值就是很多个map,自己将list遍历打印map即可。
以上便是对于数据表的查询操作。
然后发现使用JdbcTemplate,大大地简化了核心6步骤中的第5步(处理结果)。
以前需要处理结果集也就是ResultSet,写一个迭代器再获取其中具体的值,非常地繁琐。
现在JdbcTemplate将其封装了,使用起来特别地方便。
当然查询操作还有其它方法,但个人精力实在是有限,暂时只能学到这儿,明天继续学习。
最后
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。