• Spring Boot笔记 #06# Data


    翻译自:https://docs.spring.io/spring-boot/docs/current/reference/html/data.html#data.sql

    Spring Boot集成了许多数据技术,包括SQL和NoSQL。

    1. SQL Databases

    Spring框架为使用SQL数据库提供了广泛的支持,从使用JdbcTemplate直接访问JDBC到完成Hibernate等“对象关系映射(ORM)”技术。Spring数据提供了一个额外的功能级别:直接从接口创建存储库实现,并使用约定从方法名生成查询。Spring Data提供了一个额外的功能级别:直接从接口创建Repository实现,并使用约定(conventions)从方法名生成查询。

    1.1. Configure a DataSource

    Java的javax.sql.DataSource接口提供了处理数据库连接的标准方法。传统上,一个'DataSource'使用一个URL和一些凭据来建立数据库连接。

    更多高级示例,请参见“如何”部分,这些示例通常用于完全控制数据源的配置。

    1.1.1. 嵌入式数据库支持

    使用内存中的嵌入式数据库开发应用程序通常很方便。显然,内存数据库不提供持久存储。您需要在应用程序启动时填充数据库,并准备在应用程序结束时丢弃数据。

    “如何”部分包括一个关于如何初始化数据库的部分。

    Spring Boot可以自动配置嵌入式H2HSQLDerby数据库。您不需要提供任何连接URL。您只需要包含对要使用的嵌入式数据库的构建依赖项。如果类路径上有多个嵌入式数据库,请设置spring.datasource.embedded-database-connection属性来控制使用哪个数据库。将属性设置为“none”将禁用嵌入式数据库的自动配置。

    例如,典型的POM依赖关系如下:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <scope>runtime</scope>
    </dependency>

    要自动配置嵌入式数据库,需要依赖spring-jdbc。在本例中,它通过spring-boot-starter-data-jpa传递地被拉取引入。

    无论出于何种原因,如果确实为嵌入式数据库配置了连接URL,请务必确保禁用数据库的自动关闭(the database’s automatic shutdown)。如果使用H2,那么应该使用DB_CLOSE_ON_EXIT=FALSE。如果使用HSQLDB,应确保使用shutdown=true。禁用数据库的自动关闭可以让Spring在数据库关闭时进行引导控制,从而确保一旦不再需要访问数据库,就会发生这种情况。

    1.1.2. Connection to a Production Database

    还可以使用池数据源(a pooling DataSource)自动配置生产数据库连接(Production database connections)

    1.1.3. DataSource Configuration

    数据源配置由spring.datasource.*中的外部配置属性控制。例如,您可以在application.properties中声明以下部分:

    spring.datasource.url=jdbc:mysql://localhost/test
    spring.datasource.username=dbuser
    spring.datasource.password=dbpass

    您至少应该通过设置spring.datasource.url属性来指定URL。否则,Spring Boot会尝试自动配置嵌入式数据库。

    对于要创建的池数据源,我们需要能够验证有效的驱动程序类是否可用,所以我们在做任何事情之前都要检查它。换句话说,如果设置spring.datasource.driver-class-name=com.mysql.jdbc.Driver,那么该类必须是可加载的。

    有关更多受支持的选项,请参见DataSourceProperties。这些都是标准选项无论实际实现如何,它们都会起作用。还可以通过使用各自的前缀(spring.datasource.hikari.*spring.datasource.tomcat.*spring.datasource.dbcp2.*spring.datasource.oracleucp.*)来微调特定于实现的设置。有关更多详细信息,请参阅您正在使用的连接池实现的文档。

    例如,如果使用Tomcat连接池,可以自定义许多其他设置,如以下示例所示:

    spring.datasource.tomcat.max-wait=10000
    spring.datasource.tomcat.max-active=50
    spring.datasource.tomcat.test-on-borrow=true

    如果没有可用的连接,将连接池设置为在抛出异常之前等待10000ms,将最大连接数限制为50,并在从连接池借用连接之前验证连接。

    1.1.4. Supported Connection Pools

    Spring Boot使用以下算法来选择特定的实现:

    我们更喜欢HikariCP的性能和并发性。如果HikariCP可用,我们总是选择它。

    否则,如果Tomcat池数据源可用,我们就使用它。

    否则,如果Commons DBCP2可用,我们就使用它。

    如果HikariCP、Tomcat和DBCP2都不可用,如果Oracle UCP可用,我们就使用它。

    如果使用spring-boot-starter-jdbcspring-boot-starter-data-jpa “starters”则会自动获得对HikariCP的依赖关系

    您可以完全绕过该算法,通过设置spring.datasource.type属性指定要使用的连接池。如果在Tomcat容器中运行应用程序,这一点尤其重要,因为Tomcat jdbc是默认提供的。

    额外的连接池总是可以使用DataSourceBuilder手动配置。如果您定义自己的DataSource bean,则不会发生自动配置。DataSourceBuilder支持以下连接池:

    • HikariCP
    • Tomcat pooling Datasource
    • Commons DBCP2
    • Oracle UCP & OracleDataSource
    • Spring Framework’s SimpleDriverDataSource
    • H2 JdbcDataSource
    • PostgreSQL PGSimpleDataSource

    1.3. JPA and Spring Data JPA

    Java持久性API(The Java Persistence API)是一种标准技术,允许您将对象“映射”到关系数据库。spring-boot-starter-data-jpa POM提供了快速入门的方法。它提供了以下关键依赖项:

    • Hibernate:最流行的JPA实现之一。
    • Spring Data JPA:帮助您实现基于JPA的存储库。
    • Spring ORM:Spring框架的核心ORM支持。

    我们在这里不讨论JPA或Spring Data的太多细节。您可以遵循https://spring.io/“使用JPA访问数据”指南,并阅读Spring Data JPAHibernate参考文档。

    1.3.1. Entity Classes

    传统上,JPA“实体”类是在persistence.xml文件中指定的。在Spring Boot中,不需要这个文件,而是使用“实体扫描(Entity Scanning)”。默认情况下,将搜索主配置类(用@EnableAutoConfiguration或@SpringBootApplication注释的配置类)下的所有包。

    任何带有@Entity、@Embeddeble或@MappedSuperclass注释的类都会被考虑。典型的实体类类似于以下示例:

    import java.io.Serializable;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Entity
    public class City implements Serializable {
    
        @Id
        @GeneratedValue
        private Long id;
    
        @Column(nullable = false)
        private String name;
    
        @Column(nullable = false)
        private String state;
    
        // ... additional members, often include @OneToMany mappings
    
        protected City() {
            // no-args constructor required by JPA spec
            // this one is protected since it should not be used directly
        }
    
        public City(String name, String state) {
            this.name = name;
            this.state = state;
        }
    
        public String getName() {
            return this.name;
        }
    
        public String getState() {
            return this.state;
        }
    
        // ... etc
    
    }

    您可以使用@EntityScan注释自定义实体扫描位置。请参阅“howto.html”操作指南

    1.3.2. Spring Data JPA Repositories

    Spring Data JPA存储库是可以定义用于访问数据的接口。JPA查询是根据方法名自动创建的。例如,CityRepository接口可能会声明一个findAllByState(字符串状态)方法来查找给定状态下的所有城市。

    对于更复杂的查询,可以使用Spring Data的Query注解对方法进行注释。

    Spring Data存储库通常从RepositoryCrudRepository接口扩展而来。如果使用自动配置,存储库将从包含主配置类(用@EnableAutoConfiguration@SpringBootApplication注释的配置类)的包中向下搜索。

    以下示例显示了一个典型的Spring Data存储库接口定义:

    import org.springframework.boot.docs.data.sql.jpaandspringdata.entityclasses.City;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.repository.Repository;
    
    public interface CityRepository extends Repository<City, Long> {
    
        Page<City> findAll(Pageable pageable);
    
        City findByNameAndStateAllIgnoringCase(String name, String state);
    
    }

    Spring Data JPA存储库支持三种不同的引导模式:默认、延迟和懒惰。要启用延迟或懒惰引导,请将spring.data.jpa.repositories.bootstrap-mode属性分别设置为deferred或者lazy。使用延迟或懒惰引导时,自动配置的EntityManagerFactoryBuilder将使用上下文的AsyncTaskExecutor(如果有)作为引导执行器。如果存在多个,将使用名为applicationTaskExecutor的。

    我们仅仅触及了Spring Data JPA的皮毛。要了解完整的细节,请参阅Spring Data JPA参考文档

    1.5. Using H2’s Web Console

    H2数据库提供了一个基于浏览器的控制台,Spring Boot可以为您自动配置。当满足以下条件时,控制台将自动配置:

    • 您正在开发一个基于servlet的web应用程序。
    • com.h2database:h2在类路径上。
    • 您正在使用Spring Boot的开发工具(Spring Boot’s developer tools)。

    如果您没有使用Spring Boot的开发工具,但仍然希望使用H2的控制台,那么可以将spring.h2.console.enabled属性的值配置为true。

    H2控制台仅用于开发过程中,因此您应该注意确保spring.h2.console.enabled在生产环境中未设置为true。

  • 相关阅读:
    js实现好看的图案 加勒比海盗(php拍黄片)
    网站优化的几点 下
    php算法 快速排序 选择算法 冒泡算法
    javascript中null和undefined的区别
    tp3 上传图片出现上传根目录不存在!请尝试手动创建:./Public/Uploads/ 错误解决思路
    网站优化的几点 上
    tp5框架 报错非法请求:admin/index/index
    通过response向服务器用Io流写入图片
    解决客户端向服务器写中文时乱码问题
    setInterval()设置页面5,4,3,2,1秒后跳转
  • 原文地址:https://www.cnblogs.com/xkxf/p/15978642.html
Copyright © 2020-2023  润新知