1. 程式人生 > >SpringBoot與資料訪問JDBC&自動配置原理(一)

SpringBoot與資料訪問JDBC&自動配置原理(一)

1、建立專案(通過idea)


這裡的mysql就是幫助我們匯入mysql驅動的。

然後通過專案下的pom.xml檔案,可以發現我們匯入了下面這些依賴。


我們在使用最基本的jdbc的時候,我們只要引入jdbc和mhysql驅動就可以了。

2、與資料庫連線

  啟動資料庫

我這裡是通過phpstudy啟動mysql資料庫的。


開啟Navicat Premium,可以發現成功啟用資料庫。


新建一個數據庫


編寫配置檔案

然後在resources下的新建一個application.yml檔案進行編寫相關的配置檔案。


測試



可以發現預設使用的是是tomcat的jdbc資料來源


可以發現JDBC4Connection也能獲取得到,沒問題。

回到配置檔案,我們按住ctrl鍵點username進去,如下圖。


然後進入DataSourceProperties.java檔案。可以發現數據源的相關配置都是在這裡配置的。


3、原理解析

那麼為什麼會是這樣的效果?包括我們自動裝配到資料來源,而且springboot預設使用tomcat的jdbc的連線池作為資料來源的。

那麼我們可以探究一下有關資料來源的自動配置原理。

我們開啟自動配置包


我們可以發現jdbc下都是一些跟資料來源有關的配置。


然後我們拿幾個比較重要的來講解一下。


這裡的@Bean表示給容器中加元件。都是加一些DataSource。

這個類主要是給容器中加資料來源的,但是加哪些資料來源,就根據各種判斷。

如果你匯入了tomcat的jdbc連線池,並且你配置的spring.datasource.type是tomcat的jdbc這個資料來源,如果你沒配,也是認為你是配了的。 那麼這種情況我們就匯入tomcat的jdbc的資料來源。


如果你沒有匯入tomcatjdbc的資料來源,那麼根據其他條件進行匯入其他的資料來源等等。


可以通過下面這個方法進行自定義資料來源


當然,還有一處比較好玩的配置。有一個DataSourceAutoConfiguration。


這個DataSourceInitializer的作用是什麼?我們點進去看看。


可以發現,其實它是一個ApplicationListener(這個監聽器在Spring註解版裡有講過,可以在那參考一下原理..但是我沒看過..以後有時間再上穀粒學院看看吧~~~)

通過註解我們可以知道這個DataSourceInitializer的作用


第一個叫@PostConstruct比如說我們這個資料來源剛建立好,我們把這個Initializer建立好物件以後它要呼叫init()方法,這個方法的作用就是從容器中拿到資料來源,拿到資料來源以後就runSchemaScripts();


還有一步叫onApplicationEvent,這就是我們的監聽器,在我們監聽到一個事件以後,它就會呼叫這個方法。 


通過程式建立表

我們在跑建表語句的時候,我們首先要得到這個建表文件


而它獲取呢,你可以指定這個檔案的位置,它如果能夠獲取得到,它就OK了。如果不行就從類路徑下找fallback


而這個fallback呢,就是我們之前傳的這個schema


也就是說呢,它來找下面的platform.sql或者.sql , 而這個platform預設就是all



所以要執行這個schema檔案就要改名,改成schema-all.sql 或者schema.sql

它呢,都是預設載入的。


執行程式,成功建表。



當然,如果我們不想改名,就用department.sql進行建表也可以。但是我們要修改配置檔案。


然後如果在有資料來源的情況下,它還給我們容器中放一個JdbcTemplate 以及NameParameterJdbcTemplate(具名引數JdbcTemplate),方便我們操作資料庫。


4、操作資料庫

    寫一個HelloController,進行資料查詢。這裡要注意的是,如果那個scema.sql不刪除,那麼我們重新啟動這個程式的時候就會再執行一次schema.sql檔案,原來中的資料就會消失。所以,當我們不用的時候就要刪除schema.sql檔案。

我們在資料庫中插入一個數據。


成功返回JSON資料


小結