专栏首页零基础自学Java【JavaWeb】72:JdbcTemplate入门

【JavaWeb】72:JdbcTemplate入门

今天是刘小爱自学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将其封装了,使用起来特别地方便。

当然查询操作还有其它方法,但个人精力实在是有限,暂时只能学到这儿,明天继续学习。

最后

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。

本文分享自微信公众号 - 刘小爱(liuxiaoai946),作者:刘小爱

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【微服务】164:商品微服务需要提供的接口

    因为涉及到一个分页查询,所以service层的代码较为复杂,当时详细编写并讲解过其代码实现,在此不再赘述。

    刘小爱
  • 【微服务】152:Stream流和通用mapper批量查询的使用

    昨天虽然完成了商品查询,但是其有一个问题,我们查询的数据是SPU,SPU中关于商品分类和品牌只是记录了其Id。

    刘小爱
  • 【微服务】144:跨域问题及其解决方法

    其实第③种方式直接使用网关域名访问也是可以的,在前天使用nginx时配置了网关域名。

    刘小爱
  • python的pyecharts绘制南丁格尔玫瑰图

    from:偶然得知医护界有一位叫“”南丁格尔的“提灯女神”,而且这位女神还创造了一种图,即“玫瑰图”。

    数据森麟
  • 基于MySQL数据库下亿级数据的分库分表

    原文:http://www.enmotech.com/web/detail/1/739/1.html 

    数据和云01
  • 不用Oracle?基于MySQL数据库下亿级数据的分库分表

    墨墨导读:本文以一个实际的项目应用为例,层层向大家剖析如何进行数据库的优化。项目背景是企业级的统一消息处理平台,客户数据在5千万加,每分钟处理消息流水1千万,每...

    数据和云
  • 前端动画必知必会:React 和 Vue 都在用的 FLIP 思想实现小姐姐流畅移动。

    乍一看,让我们手写出这个逻辑应该是非常复杂的,先看看本文最后要实现的效果吧,和这个案例是非常类似的。

    ssh1995
  • 估值 30 亿美元,连续 15 年纯远程办公,这家公司做对了什么?

    ? 来源:极客公园   ID: geekpark ---- 他们不发邮件、没有办公室、员工超过 1000 人,旗下拥有 Tumblr 与 WordPress ...

    腾讯SaaS加速器
  • 动态图表3|数据有效性+名称管理器

    今天要跟大家分享的是动态图表3——数据有效性+名称管理器! 个人感觉,动态图表的练习过程,是最高效的学习excel途径,因为整个过程会使用到函数、控件(开发工具...

    数据小磨坊
  • 解决后台返回的Timestamp日期数据里包含T

    qubianzhong

扫码关注云+社区

领取腾讯云代金券