jdbcTemplate使用方法實(shí)例解析
這篇文章主要介紹了jdbcTemplate使用方法實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
Spring JDBC抽象框架core包提供了JDBC模板類(lèi),其中JdbcTemplate是core包的核心類(lèi),所以其他模板類(lèi)都是基于它封裝完成的,JDBC模板類(lèi)是第一種工作模式。
JdbcTemplate類(lèi)通過(guò)模板設(shè)計(jì)模式幫助我們消除了冗長(zhǎng)的代碼,只做需要做的事情(即可變部分),并且?guī)臀覀冏瞿男┕潭ú糠郑邕B接的創(chuàng)建及關(guān)閉。
在application-mybatis.xml中配置的DataSource注入到JdbcTemplate中,就可以使用JdbcTemplate模板了
配置文件中加入以下內(nèi)容:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/><!--加載驅(qū)動(dòng)-->
<property name="url" value="${jdbc.url}"/><!--數(shù)據(jù)庫(kù)的位置-->
<property name="username" value="${jdbc.username}"/><!--數(shù)據(jù)庫(kù)的用戶名-->
<property name="password" value="${jdbc.password}"/><!--對(duì)應(yīng)的密碼-->
<property name="maxActive" value="50"/><!--連接池的最大活動(dòng)數(shù)-->
<property name="minIdle" value="5"/><!--最少保持5條空閑連接-->
<property name="maxWait" value="5000"/><!--等待時(shí)間5秒-->
</bean>
java文件:
@Autowired
@Qualifier("dataSource")
public DataSource dataSource;
public JdbcTemplate getJdbcTemplate(){
JdbcTemplate jdbcTemplate = new JdbcTemplate(this.dataSource);
return jdbcTemplate;
}
此時(shí)jdbcTemplate變量中便會(huì)有相關(guān)的數(shù)據(jù)庫(kù)的基本參數(shù)配置信息,
jdbcTemplate類(lèi)型中有如下方法

JdbcTemplate主要提供以下五類(lèi)方法:
execute方法:可以用于執(zhí)行任何SQL語(yǔ)句,一般用于執(zhí)行DDL語(yǔ)句;
update方法及batchUpdate方法:update方法用于執(zhí)行新增、修改、刪除等語(yǔ)句;batchUpdate方法用于執(zhí)行批處理相關(guān)語(yǔ)句;
query方法及queryForXXX方法:用于執(zhí)行查詢相關(guān)語(yǔ)句;
//1.查詢一行數(shù)據(jù)并返回int型結(jié)果
jdbcTemplate.queryForInt("select count(*) from test");
//2. 查詢一行數(shù)據(jù)并將該行數(shù)據(jù)轉(zhuǎn)換為Map返回
jdbcTemplate.queryForMap("select * from test where name='name5'");
//3.查詢一行任何類(lèi)型的數(shù)據(jù),最后一個(gè)參數(shù)指定返回結(jié)果類(lèi)型
jdbcTemplate.queryForObject("select count(*) from test", Integer.class);
//4.查詢一批數(shù)據(jù),默認(rèn)將每行數(shù)據(jù)轉(zhuǎn)換為Map
jdbcTemplate.queryForList("select * from test");
//5.只查詢一列數(shù)據(jù)列表,列類(lèi)型是String類(lèi)型,列名字是name
jdbcTemplate.queryForList("
select name from test where name=?", new Object[]{"name5"}, String.class);
//6.查詢一批數(shù)據(jù),返回為SqlRowSet,類(lèi)似于ResultSet,但不再綁定到連接上
SqlRowSet rs = jdbcTemplate.queryForRowSet("select * from test");
call方法:用于執(zhí)行存儲(chǔ)過(guò)程、函數(shù)相關(guān)語(yǔ)句。
支持的回調(diào)接口如下:

JdbcTemplate類(lèi)支持的回調(diào)類(lèi):
預(yù)編譯語(yǔ)句及存儲(chǔ)過(guò)程創(chuàng)建回調(diào):用于根據(jù)JdbcTemplate提供的連接創(chuàng)建相應(yīng)的語(yǔ)句;
PreparedStatementCreator:通過(guò)回調(diào)獲取JdbcTemplate提供的Connection,由用戶使用該Conncetion創(chuàng)建相關(guān)的PreparedStatement;
CallableStatementCreator:通過(guò)回調(diào)獲取JdbcTemplate提供的Connection,由用戶使用該Conncetion創(chuàng)建相關(guān)的CallableStatement;
預(yù)編譯語(yǔ)句設(shè)值回調(diào):用于給預(yù)編譯語(yǔ)句相應(yīng)參數(shù)設(shè)值;
PreparedStatementSetter:通過(guò)回調(diào)獲取JdbcTemplate提供的PreparedStatement,由用戶來(lái)對(duì)相應(yīng)的預(yù)編譯語(yǔ)句相應(yīng)參數(shù)設(shè)值;
BatchPreparedStatementSetter:;類(lèi)似于PreparedStatementSetter,但用于批處理,需要指定批處理大?。?/p>
自定義功能回調(diào):提供給用戶一個(gè)擴(kuò)展點(diǎn),用戶可以在指定類(lèi)型的擴(kuò)展點(diǎn)執(zhí)行任何數(shù)量需要的操作;
ConnectionCallback:通過(guò)回調(diào)獲取JdbcTemplate提供的Connection,用戶可在該Connection執(zhí)行任何數(shù)量的操作;
StatementCallback:通過(guò)回調(diào)獲取JdbcTemplate提供的Statement,用戶可以在該Statement執(zhí)行任何數(shù)量的操作;
PreparedStatementCallback:通過(guò)回調(diào)獲取JdbcTemplate提供的PreparedStatement,用戶可以在該P(yáng)reparedStatement執(zhí)行任何數(shù)量的操作;
CallableStatementCallback:通過(guò)回調(diào)獲取JdbcTemplate提供的CallableStatement,用戶可以在該CallableStatement執(zhí)行任何數(shù)量的操作;
結(jié)果集處理回調(diào):通過(guò)回調(diào)處理ResultSet或?qū)esultSet轉(zhuǎn)換為需要的形式;
RowMapper:用于將結(jié)果集每行數(shù)據(jù)轉(zhuǎn)換為需要的類(lèi)型,用戶需實(shí)現(xiàn)方法mapRow(ResultSet rs, int rowNum)來(lái)完成將每行數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的類(lèi)型。
RowCallbackHandler:用于處理ResultSet的每一行結(jié)果,用戶需實(shí)現(xiàn)方法processRow(ResultSet rs)來(lái)完成處理,在該回調(diào)方法中無(wú)需執(zhí)行rs.next(),該操作由JdbcTemplate來(lái)執(zhí)行,用戶只需按行獲取數(shù)據(jù)然后處理即可。
ResultSetExtractor:用于結(jié)果集數(shù)據(jù)提取,用戶需實(shí)現(xiàn)方法extractData(ResultSet rs)來(lái)處理結(jié)果集,用戶必須處理整個(gè)結(jié)果集;
JdbcTemplate執(zhí)行流程:首先定義SQL,其次調(diào)用JdbcTemplate方法執(zhí)行SQL,最后通過(guò)RowCallbackHandler回調(diào)處理ResultSet結(jié)果集。
Spring JDBC解決方法相比傳統(tǒng)JDBC編程方式簡(jiǎn)單多了,只有可變部分需要我們來(lái)做,其他的都由Spring JDBC框架來(lái)實(shí)現(xiàn)了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java調(diào)用elasticsearch本地代碼的操作方法
這篇文章主要介紹了Java調(diào)用elasticsearch本地代碼的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
PipedWriter和PipedReader源碼分析_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了PipedWriter和PipedReader源碼分析_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下2017-05-05
被遺忘的Java關(guān)鍵字transient的使用詳解
在 Java 中,transient 是一個(gè)關(guān)鍵字,用于指定一個(gè)類(lèi)的字段(成員變量)在序列化時(shí)應(yīng)該被忽略。本文將通過(guò)示例為大家簡(jiǎn)單講講transient的使用,需要的可以參考一下2023-04-04
IDEA在一個(gè)項(xiàng)目空間下管理多個(gè)項(xiàng)目的操作方法
這篇文章主要介紹了IDEA如何在一個(gè)項(xiàng)目空間下管理多個(gè)項(xiàng)目,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
log4j2的高并發(fā)死鎖問(wèn)題配置優(yōu)化方式
這篇文章主要介紹了log4j2的高并發(fā)死鎖問(wèn)題配置優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

