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

相关文章
相关标签/搜索