• Spring Boot与数据


    SpringBoot 着眼于JavaEE! 不仅仅局限于 Mybatis 、JDBC、 Spring Data JPA

    Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问技术,包括非关系数据库、 Map-Reduce 框架、云数据服务等等;另外也包含对关系数据库的访问支持

    对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置。引入各种XXXTemplate, xxRespository来简化我们队数据库访问层的操作。对于我们来说只需要进行简单的设置即可。

    • Spring Data 包含多个子项目:

    – Spring Data Commons

    – Spring Data JPA – Spring Data KeyValue

    – Spring Data LDAP – Spring Data MongoDB

    – Spring Data Gemfire – Spring Data REST

    – Spring Data Redis

    – Spring Data for Apache Cassandra

    – 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:
    1、参考DataSourceConfiguration,根据配置创建数据源,默认使用Tomcat连接池;可以使用spring.datasource.type指定自定义的数据源类型; 比如经常用的C3P0
    2、SpringBoot默认可以支持: org.apache.tomcat.jdbc.pool.DataSource、HikariDataSource、BasicDataSource、

    3、自定义数据源类型 可以自定义数据源类型

    /**
     * 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();
       }
    }

    4、DataSourceInitializer:ApplicationListener(就是个监听器)并且实现了InitializingBean接口

    作用:
    1)、runSchemaScripts();运行建表语句;
    2)、runDataScripts();运行插入数据的sql语句;
    默认只需要将文件命名为:

    schema‐*.sql、data‐*.sql
    默认规则:schema.sql,schema‐all.sql;
    可以使用  
    schema:    
          ‐ classpath:department.sql
          指定位置

     5、操作数据库:自动配置了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的监控
        //1、配置一个管理后台的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;
        }
        //2、配置一个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


    1、xml的MyBatis

    2、注解的MyBatis

     SpringBoot  yml指定全局配置文件 和 sql映射配置文件位置就OK了

    SpringBoot 整合JPA


    Spring data的理想就是同意数据访问的API

    JPA是操作关系型数据库的,Java持久层api

  • 相关阅读:
    Educational Codeforces Round 51 (Rated for Div. 2)
    Kruskal重构树入门
    编译原理词法分析
    java.lang.String内部结构的变化
    android 世界各国英文简写代码 资源文件
    openCV python 安装
    解读30个提高Web程序执行效率的好经验
    从认知盈余说起,也谈分享精神
    STL set multiset map multimap unordered_set unordered_map example
    [置顶] 【Git入门之一】Git是神马?
  • 原文地址:https://www.cnblogs.com/toov5/p/10781222.html
Copyright © 2020-2023  润新知