JdbcTempleteJdbcTemplete代码详解--模板方法详解
Posted ssslinppp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JdbcTempleteJdbcTemplete代码详解--模板方法详解相关的知识,希望对你有一定的参考价值。
![](https://image.cha138.com/20210611/0fd146866aa74be5a64c67374f4e742d.jpg)
JdbcTemplete类层次结构
![](https://image.cha138.com/20210611/0a0ea12eaa3e4afe8437fa3a86977677.jpg)
- JdbcAccessor:对DataSource数据源进行管理和配置;
![](https://image.cha138.com/20210611/2f8ff53f4cb948d1b71bcdc8767e525e.jpg)
- JdbcOperations:定义了通过JDBC操作数据库的基本操作方法;
![](https://image.cha138.com/20210611/38903f23267a4a9fbed828c27010ef68.jpg)
- JdbcTemplate:提供了实现JdbcOperations接口方法的细节;
JdbcTemplate中模板方法设计模式的使用
模板方法设计模式:模板方法中定义算法的基本骨架,由子类在实现其中的一些细节。
在jdbc访问数据库时,需要创建和维护、销毁Connection、Statement,以及处理SqlException等,如下所示:
![](https://image.cha138.com/20210611/3cb21faacfa54788b737b3076393adfc.jpg)
从上面可以看出,所有的数据库操作,都有一个固定的套路,为了避免重复代码,JdbcTemplate使用模板方法设计模式,将数据库访问中涉及到的不变部分放在JdbcTemplate中,而将变化的部分(比如sql语句)放到Callback中;
JdbcTemplate中的execute()就是模板方法:
![](https://image.cha138.com/20210611/5b5974ce4f8f40febbc8db8aed32c234.jpg)
![](https://image.cha138.com/20210611/ac5b03526dc848e4b9f3d525dc68402d.jpg)
从上面的代码中,可以看到,创建Connection和Statement,以及处理exception、释放资源等,都是固定的,具体的sql都是变化的部分,都放在Callback中。
下面以query为例进行介绍:
![](https://image.cha138.com/20210611/04d32e14c64b44c6a6e0cd47e814cf02.jpg)
下面在看一个update的例子:
![](https://image.cha138.com/20210611/7cbbd9c65a224f13beb9cf5f2f9b49a3.jpg)
JdbcTemplate中的Callback
主要有3个:
![8.gif](https://image.cha138.com/20210611/7285b8a9530b4221b80edacc14046ccb.jpg)
- Statement;
- CallableStatement;
- PreparedStatement;
每种Statement都有自己对应的execute()方法,都是模板方法,且实现细节基本相同;
每种execute()方法中的Callback函数,分别对应上面3种;
![](https://image.cha138.com/20210611/574d2980d32a4b4bbff28ec37e317ff9.jpg)
JdbcTemplate的query()
JdbcTemplate中的query方法,使用的基本都是preparedStatement
JdbcTemplate方法概览
查询方法主要分为如下几大类:
- query()
- queryForList()
- queryForMap()
- queryForMap()
- queryForRowSet()
而上面的每一种,基本又可以分为3类,分别为:
- ResultSetExtractor<T> :
- RowCallbackHandler
- RowMapper<T>
![](https://image.cha138.com/20210611/6163baaf20444cacb363f73813b4b85e.jpg)
![](https://image.cha138.com/20210611/7846dfb5facc43308c15054b2e2640e9.jpg)
![](https://image.cha138.com/20210611/475f1eb35a2e4650936c044921165312.jpg)
以上是关于JdbcTempleteJdbcTemplete代码详解--模板方法详解的主要内容,如果未能解决你的问题,请参考以下文章