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資料