Spring Boot與數據

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

相關文章
相關標籤/搜索