您現在的位置是:網站首頁> 內容頁

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

  • 沐鳴娛樂app
  • 2019-10-02
  • 15人已閱讀
簡介  emmm.....常規開局,繼續說一下廢話,前面簡單的說了一下spring的ioc容器創建原理(花了不少時間去看了別人的博客+查了不少資料+自己的理解),相信大家對ioc容器有了一

  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的原理。。。。。下節再說吧。。。

文章評論

Top 上海十一选五今天开奖结果查询