SpringBoot 着眼於JavaEE! 不單單侷限於 Mybatis 、JDBC、 Spring Data JPAcss
Spring Data 項目的目的是爲了簡化構建基於 Spring 框架應用的數據訪問技術,包括非關係數據庫、 Map-Reduce 框架、雲數據服務等等;另外也包含對關係數據庫的訪問支持java
對於數據訪問層,不管是SQL仍是NOSQL,Spring Boot默認採用整合Spring Data的方式進行統一處理,添加大量自動配置,屏蔽了不少設置。引入各類XXXTemplate, xxRespository來簡化咱們隊數據庫訪問層的操做。對於咱們來講只須要進行簡單的設置便可。mysql
• Spring Data 包含多個子項目:web
– Spring Data Commonsspring
– Spring Data JPA – Spring Data KeyValuesql
– Spring Data LDAP – Spring Data MongoDB數據庫
– Spring Data Gemfire – Spring Data RESTapache
– Spring Data Redisapi
– Spring Data for Apache Cassandratomcat
– Spring Data for Apache Solr
– Spring Data Couchbase (community module)
– Spring Data Elasticsearch (community module)
– Spring Data Neo4j (community module)
Spring Data是spring的一個子項目。
Spring Data裏面又包含不少子項目
不單單能夠訪問關係型數據庫,還有非關係型數據庫
SpringData爲咱們提供使用統一的API來對數據訪問層進行操做;這主要是Spring Data Commons項目來實現的。Spring Data Commons讓咱們在使用關係型或者非關係型數據訪問 技術時都基於Spring提供的統一標準,標準包含了CRUD(建立、獲取、更新、刪除)、查詢、 排序和分頁的相關操做。
特色:
1)統一的Repository接口
Repository<T, ID extends Serializable>:統一接口
RevisionRepository<T, ID extends Serializable, N extends Number & Comparable<N>>:基於樂觀
鎖機制
CrudRepository<T, ID extends Serializable>:基本CRUD操做
PagingAndSortingRepository<T, ID extends Serializable>:基本CRUD及分頁
2)提供數據訪問模板類xxTemplate
如 MongoTemplate RedisTemplate
3) JPA 與 Spring Data
1)、JpaRepository基本功能 編寫接口繼承JpaRepository既有crud及分頁等基本功能
2)、定義符合規範的方法命名 在接口中只須要聲明符合規範的方法,即擁有對應的功能
Spring Boot底層就是利用Spring Data進行數據庫訪問的默認處理方式。
導入場景的starters
整合基本JDBC與數據源
爲了方便展現,同時引入了web模塊
此時的項目pom文件:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
如何配置才能跟數據庫交互呢?
配置好yml:
spring:
datasource:
username: root
password: root
##配置好時區 MySQL默認的時區是UTC時區
url: jdbc:mysql://127.0.0.1:3306/book?serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
測試類:
@RunWith(SpringRunner.class) @SpringBootTest public class DataApplicationTests { //注入數據源 @Autowired DataSource dataSource; @Test public void contextLoads() throws SQLException { System.out.println(dataSource.getClass()); //獲取鏈接 Connection connection = dataSource.getConnection(); System.out.println(connection); connection.close(); } }
運行結果:
效果:
默認是用org.apache.tomcat.jdbc.pool.DataSource做爲數據源;
數據源的相關配置都在DataSourceProperties裏面;
自動配置原理:
org.springframework.boot.autoconfigure.jdbc:
一、參考DataSourceConfiguration,根據配置建立數據源,默認使用Tomcat鏈接池;可使用spring.datasource.type指定自定義的數據源類型; 好比常常用的C3P0
二、SpringBoot默承認以支持: org.apache.tomcat.jdbc.pool.DataSource、HikariDataSource、BasicDataSource、
三、自定義數據源類型 能夠自定義數據源類型
/** * Generic DataSource configuration. */ @ConditionalOnMissingBean(DataSource.class) @ConditionalOnProperty(name = "spring.datasource.type") static class Generic { @Bean public DataSource dataSource(DataSourceProperties properties) { //使用DataSourceBuilder建立數據源,利用反射建立響應type的數據源,而且綁定相關屬性 return properties.initializeDataSourceBuilder().build(); } }
四、DataSourceInitializer:ApplicationListener(就是個監聽器)而且實現了InitializingBean接口
做用:
1)、runSchemaScripts();運行建表語句;
2)、runDataScripts();運行插入數據的sql語句;
默認只須要將文件命名爲:
schema‐*.sql、data‐*.sql
默認規則:schema.sql,schema‐all.sql;
可使用
schema:
‐ classpath:department.sql
指定位置
五、操做數據庫:自動配置了JdbcTemplate操做數據庫
具體用法我就不冗餘了,你們能夠自行學習下。平時開發也基本用不到這個。
咱們能夠點開看下:
從自動配置的類中,找到jdbc
這裏都是與數據源有關的配置:
包括數據源的配置
實際開發過程當中通常使用阿里的druid數據源,包括了監控、安全等方案。開發通常用 比較多
整合步驟:
pom:
引入數據源
<!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency>
修改下配置就OK了:
spring:
datasource:
username: root
password: root
##配置好市區 MySQL默認的時區是UTC時區
url: jdbc:mysql://127.0.0.1:3306/book?serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
測試:
@RunWith(SpringRunner.class) @SpringBootTest public class DataApplicationTests { //注入數據源 @Autowired DataSource dataSource; @Test public void contextLoads() throws SQLException { System.out.println(dataSource.getClass()); //獲取鏈接 Connection connection = dataSource.getConnection(); System.out.println(connection); connection.close(); } }
結果:
數據源除了基本配置還有各類屬性配置的,能夠參考官網
這個須要配置類的 (包含web監控)
@Configuration public class DruidConfig { @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druid(){ return new DruidDataSource(); } //配置Druid的監控 //一、配置一個管理後臺的Servlet @Bean public ServletRegistrationBean statViewServlet(){ ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); Map<String,String> initParams = new HashMap<>(); initParams.put("loginUsername","admin"); initParams.put("loginPassword","123456"); initParams.put("allow","");//默認就是容許全部訪問 initParams.put("deny","192.168.15.21"); bean.setInitParameters(initParams) return bean; } //二、配置一個web監控的filter @Bean public FilterRegistrationBean webStatFilter(){ FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new WebStatFilter()); Map<String,String> initParams = new HashMap<>(); initParams.put("exclusions","*.js,*.css,/druid/*"); bean.setInitParameters(initParams); bean.setUrlPatterns(Arrays.asList("/*")); return bean; } }
配置Druid的監控
配置一個管理後臺的Servlet config裏面配置,沒有web.xml
配置一個監控的filter
詳情請參考官網。
Spring Boot 整合 Mybatis
一、xml的MyBatis
二、註解的MyBatis
SpringBoot yml指定全局配置文件 和 sql映射配置文件位置就OK了
SpringBoot 整合JPA
Spring data的理想就是贊成數據訪問的API
JPA是操做關係型數據庫的,Java持久層api