JdbcTemplate(3)

JdbcTemplate(3)

上文已经介绍了如何使用Jdbc模板模式设计数据库的更新操作,那么下面介绍如何执行查询操作。继续搬好板凳,坐不下就站着听课了。

JDBC步骤

取得数据库连接

预编译SQL语句

对占位符进行赋值

执行查询操作

关闭数据库连接

看见没有,基本上数据库的JDBC操作都是按照该“生产线” 进行处理,因此在这里我认为这套操作是流水线生产。在计算机设计模式上命名为模板模式。那么我们重构出来的工具类,美其名为JdbcTemplate(借鉴Spring框架)

01

重构

抽取流水线代码段

在这里将JDBC的流水线操作代码抽取出来,如下图所示:

通过上述代码,已经完成了数据库连接,预编译,占位符赋值,数据库执行,数据库连接关闭操作。那么剩下的操作就是如何面对不同的业务需求?因为数据库的查询操作,每个业务查询的字段是不一样的,因此这种变化性使得无法进行代码封装。

举个例子:

目前执行用户表的数据查询,那么while循环里面进行的是用户表相关字段的查询操作,然后将查询的结果存储于List容器中。

如果现在执行角色表的数据查询,那么while循环里面则进行的是角色表相关字段的查询操作,然后将查询结果存储于List中。

由此可见,不同的业务查询的内容不一样,那么代码如何去面对这种变动的情况了?

02

重构

变化的代码延迟出去

由于任何人都无法预测业务的执行过程,因此结果集面对不同的业务过程,想进行封装显的无能为力。

本文讲述第一种解决方式:

解决方式

我无法封装,我就不做,延迟给开发人员自己进行业务处理

定义一个接口,发布方法,用于实现数据库行和对象的一一映射。此处应该很好理解,因为对象的组成是由属性构成。同理,数据库一行记录是由多个字段组成。那么我们可以认为一行记录与一个对象完全能形成一一映射。

那么我们思路跳跃一下,假如现在我们实例化了一个RowMapper接口对应的实体对象,那么这个对象就可以执行rowMapper方法,其中传递的参数是ResultSet。刚才的模板代码在执行while循环的时候,每循环一次,则游标向下移动,相当于一行数据一行数据移动。因此只需要拥有RowMapper接口对象,那么每次执行rowMapper方法相当于将行数据转换了对象。从而可以将返回的对象添加到List容器中。

从上图代码可以发现,每次循环的结果赋值给t,从而通过泛型处理,添加到List容器。此处是回调的一种表现结构。不得不说,这样封装之后,很巧妙,代码也变得很美!

03

重构

调用

查询操作的代码已封装好,那么下面就是如何进行调用了?

看见没有,现在的操作由以前一堆重复的流水线代码,变成现在这么精简的几行代码,业务实现延迟给开发人员自己进行编写,封装类通过回调进行调用返回。这里再次感叹,代码很美!

另外通过匿名内部类的方式进行调用,减少了代码中类的编写数量。

好了,查询操作讲述到这里,留个问题,如何查询一行记录。我想这个问题没必要进行讲述,思考一下,看如何利用该方式,完成数据库JdbcTemplate模板模式的当行记录查询操作。

此文是否对你有所启发,如果对你有所帮助,请关注本公众号

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181026A223V000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券