1.背景介紹
? ? ? ?JDBC這個(gè)概念是我在做DAO層時(shí)了解到的知識(shí)點(diǎn),主要用來實(shí)現(xiàn)連接底層數(shù)據(jù)庫,并且能夠?qū)崿F(xiàn)通過java代碼對(duì)數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的增刪查改。這個(gè)各位師兄肯定是很了解的,但是最近任務(wù)更新后使用的是JDBCTemplate進(jìn)行操作,可能會(huì)有一些師兄們就了解的不是很深,所以我也就淺顯的講一下,括弧笑。
? ? ? 并且JDBC和JDBCTemplate是不是有啥聯(lián)系呢?畢竟長得這么像!
2.知識(shí)剖析
? ? ? ?首先講JDBC肯定離不開DAO(Data Access Object)層,而JDBC的原理就是通過Connection對(duì)象獲取數(shù)據(jù)庫的連接,然后通過PreparedStatement對(duì)象處理SQL語句,再通過它的.setObject方法傳入數(shù)據(jù),最后通過方法.executeUpdate()和.executeQuery()執(zhí)行更新,這就是JDBC的基本原理。
? ? ? ?可以看到,JDBC涉及到了連接數(shù)據(jù)庫、然后處理SQL語句、然后傳值這幾個(gè)過程,可以說任何通過java代碼對(duì)數(shù)據(jù)庫的操作都離不開這幾個(gè)過程。但為什么會(huì)有五花八門的JDBC、JDBCTemplate和mybatis(我就學(xué)了這幾個(gè),更多的我就不知道了)這些方法的分別呢?
? ? ? ?那我們來看看JDBCTemplate有什么不一樣。
? ? ? ?首先JDBCTemplate是涉及到spring框架的一種方法,我們都知道spring框架中有一個(gè)神奇的東西,就是.xml配置文件。JDBCTemplate就是通過這個(gè)配置文件極大的簡化了我們代碼量,并且提高了安全性。
? ? ? ?那么問題來了,怎么通過配置文件實(shí)現(xiàn)簡化代碼呢?
其實(shí)和JDBC的思路是大同小異的。
首先我們需要在接口實(shí)現(xiàn)類中擁有一個(gè)set方法,這個(gè)是使用JDBCTemplate一定要注意的,沒有會(huì)報(bào)錯(cuò),而這個(gè)set方法就是用來連接數(shù)據(jù)庫的。然后創(chuàng)建DataSource對(duì)象和JDBCTemplate對(duì)象,分別是用來連接數(shù)據(jù)庫和處理SQL語句的。最后使用JDBCTemplate對(duì)象的.update方法和.query方法分別實(shí)現(xiàn)插入和查找。
講完原理,還有配置文件的功用還沒講。
配置文件中的東西不多,一個(gè)是DataSource對(duì)象的bean,另一個(gè)是接口實(shí)現(xiàn)類的bean并且和DataSource的bean做了引用。最后在測試類中(就是驅(qū)動(dòng)函數(shù)中),我們需要用ApplicationContext對(duì)象存儲(chǔ)配置文件的路徑,該路徑通過ClassPathXmlApplicationContext得到,
然后用ApplicationContext對(duì)象的.getBean方法連接到配置文件里的接口實(shí)現(xiàn)類的bean,然后就可以愉快的使用方法了
可以看到JDBCTemplate其實(shí)對(duì)JDBC的獲取數(shù)據(jù)庫連接的Connection對(duì)象做了封裝,提高了整體安全性,并且減少了大量冗余代碼,提高工作效率;插入、刪除等操作時(shí)也不用像JDBC一個(gè)一個(gè)字段進(jìn)行操作了,極大簡化代碼量,減少失誤;并且摒棄了TryCatch塊,更加安全了。
總之是個(gè)利器,就這么理解好了,哈哈
3.參考文獻(xiàn)
http://www.yiibai.com/springjdbc/stored_function.html
問題:jdbcTemplate 和 jdbc的區(qū)別就是對(duì)數(shù)據(jù)庫連接做了封裝嗎?
答:不單單是這個(gè),插入、刪除等操作時(shí)也不用像JDBC一個(gè)一個(gè)字段進(jìn)行操作了,極大簡化代碼量,減少失誤;并且摒棄了TryCatch塊,更加安全了。所以說,相較于JDBC,它實(shí)現(xiàn)了三個(gè)優(yōu)化。
PPT鏈接:
ptteng.github.io/PPT/PPT-java/java_task01_jdbcTemplate.html#/
視頻: