帶着萌新看springboot源碼09(springboot+JdbcTemplate)


  emmm.....常規開局,繼續說一下廢話,前面簡單的說了一下spring的ioc容器創建原理(花了不少時間去看了別人的博客+查了不少資料+自己的理解),相信大家對ioc容器有了一個初步的認識了。

  springboot學了這么久了,也該和數據庫打打交道了。大家還記不記得,以前最初用spring和數據庫打交道的一個東西,JdbcTemplate(就是對jdbc做了一個簡單的封裝,忘記了的小伙伴去看看別人的博客回顧一下),今天就用springboot如何使用JdbcTemplate和數據庫交互以及基本原理,順便看看源碼。

  還是由於我個人比較懶,我只用到Dao層,就實現一個add方法,再用一下測試方法;咳咳,不要在意細節。

1.新建一個springboot項目(web+mysql+jdbc+1.5xx版本)

 

2.配置數據源(也就是常說的連接池)

  這里用默認的連接池(org.apache.tomcat.jdbc.pool.DataSource),后面可能會說說怎么用其他比較牛的連接池(比如阿里雲的druid,這個都可以監控你給數據庫發了什么sql,多長時間等,反正是很多很多的東西),暫時先用默認的。

  配置文件配置(yml和properties都行,我用yml為例)

 

3.准備兩個.sql文件(一個是建表的,一個是插入語句的)

  這兩個sql文件放進類路徑下(就是java文件夾,resource文件夾,以及以前ssm框架編譯之后webapp下的classes文件夾),這sql文件自己就可以做出來(利用navicat),我就以我的為例(navicat  premium12),我的是試用版,還有幾天就過期了..

  

  

  之后的目錄是這樣的(注意:sql文件名稱默認是有要求的;schema-all.sql是建表語句,data-all.是插入初識數據的語句)

 

 

  好了,然后就可以寫個Dao和數據庫交互了,是不是賊快,嘿嘿。

  下面進行測試,我這極其簡陋的Dao

 

  測試方法(記得測試的時候把數據庫里面的表刪除哦~還要mysql是打開狀態的)

 

  是不是很容易,大概的總結一下:准備兩個sql文件丟到類路徑下----------->yml配置數據源(連接池)--------------->寫個Dao,然后測試

  接下來,那么問題來了,為什么我這么簡單的配置就能直接用了,不像以前xml配個數據源都要好半天,然后配置JdbcTemplate....好麻煩!

  我以前說過,springboot看原理,入口在xxxAutoConfiguration。

  在IDEA中,ctrl+N全局搜索DataSourceAutoConfiguration

 

  最重要的就是這個初始化器干了什么,在此之前,可以打開那個properties類(DataSourceProperties),可以發現這就是一個和配置文件綁定的類,我們在yml文件里配置的數據源其實就是和這個類綁定的(可以直接在yml文件里屬性那里ctrl+鼠標左鍵進入)

 

  所以初始化器就是拿到ioc容器和我們配置的數據源信息,要去做點什么事,點進去看看(還記得監聽器的原理吧,只要ioc容器發布事件,就會觸發事件派發器去遍歷所有的監聽器,執行監聽器里面的onApplicationEvent方法,我在spring ioc源碼那里說了的)

 

 

 

  我們再來看看runSchemaScripts方法是怎么找到sql文件的

 

   我可以看看getScripts方法里面是怎么找sql文件的(由下圖可知,sql建表文件默認規則:schema-all.sql或者schema.sql)

 

  由於容器發布了事件,此監聽器又會自動調用onApplicationEvent方法

  

 

  進入runDataScripts方法,其實就跟上面一樣,只是換了一個參數,把schema換成了data,所以插入數據的sql文件默認是在類路徑下data-all.sql和data.sql

 

  總結:自動配置類DataSourceAutoConfiguration啟動---------->向容器里導入DataSourceProperties類(和我們寫的yml綁定),DataSourceInitializer(本質就是一個監聽器)------------->將DataSourceProperties類綁定屬性值和ioc容器都傳入監聽器------------------>監聽器內部有個初始化方法運行建表語句(通過路徑拼接schema-all.sql和schema.sql拿到文件,利用用戶名和密碼連接數據庫運行)----------->向數據庫執行建表語句並且ioc容器發布事件---------------------->發布事件又會觸發onApplicationEvent方法--------------------->利用用戶名和密碼執行插入數據的sql文件(內部也是先要進行路徑拼接成類路徑data-all.xml和data.xml,拿到文件)

  ·還有一點沒說完,就是jdbcTemplate的原理。。。。。下節再說吧。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM