数据库
首页 > 数据库> > springboot2.6.2系列教程之SQL数据库-10

springboot2.6.2系列教程之SQL数据库-10

作者:互联网

目录

SQL 数据库

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

配置数据源

Java 的javax.sql.DataSource接口提供了一种处理数据库连接的标准方法。传统上,“数据源”使用 URL以及一些凭据来建立数据库连接。

嵌入式数据库支持

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

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>

连接到生产数据库

生产数据库连接也可以使用 pooling 自动配置DataSource

数据源配置

DataSource 配置由spring.datasource.*. 例如,您可以在 中声明以下部分application.properties

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

注意:Spring Boot 可以从 URL 推导出大部分数据库的 JDBC 驱动类。如果需要指定特定的类,可以使用该spring.datasource.driver-class-name属性。

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

支持的连接池

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

  1. 我们更喜欢HikariCP的性能和并发性。如果 HikariCP 可用,我们总是选择它。
  2. 否则,如果 Tomcat 池DataSource可用,我们就使用它。
  3. 否则,如果Commons DBCP2可用,我们将使用它。
  4. 如果 HikariCP、Tomcat 和 DBCP2 都不可用,而如果 Oracle UCP 可用,我们就使用它。

连接到 JNDI 数据源

如果您将 Spring Boot 应用程序部署到 Application Server,您可能希望使用 Application Server 的内置功能配置和管理 DataSource,并使用 JNDI 访问它。

spring.datasource.jndi-name属性可用作替代方法,spring.datasource.urlspring.datasource.usernamespring.datasource.password特定DataSourceJNDI 位置访问 。例如,以下部分application.properties显示了如何访问 JBoss AS 定义的DataSource

spring:
  datasource:
    jndi-name: "java:jboss/datasources/customers"

使用 JdbcTemplate

SpringJdbcTemplateNamedParameterJdbcTemplate类是自动配置的,您可以@Autowire将它们直接放入您自己的 bean 中,如下例所示:

@Component
public class MyBean {

    private final JdbcTemplate jdbcTemplate;

    public MyBean(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void doSomething() {
        this.jdbcTemplate ...
    }

}

您可以使用属性自定义模板的一些属性spring.jdbc.template.*,如下例所示:

spring:
  jdbc:
    template:
      max-rows: 500

JPA 和 Spring Data JPA

Java Persistence API 是一种标准技术,可让您将对象“映射”到关系数据库。spring-boot-starter-data-jpaPOM 提供了一种快速入门的方法。它提供以下关键依赖项:

实体类

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

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

@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

}

存储库

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

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

Spring Data 存储库通常从RepositoryorCrudRepository接口扩展而来。如果您使用自动配置,则从包含您的主要配置类(用@EnableAutoConfiguration或注释的那个@SpringBootApplication)的包中搜索存储库。

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

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属性分别设置为deferredlazy。当使用延迟或延迟引导时,自动配置EntityManagerFactoryBuilder将使用上下文的AsyncTaskExecutor(如果有的话)作为引导执行程序。如果存在多个,applicationTaskExecutor将使用命名的那个。

创建和删除 JPA 数据库

默认情况下,当您使用嵌入式数据库(H2、HSQL 或 Derby)时,才会自动创建 JPA 数据库。您可以使用spring.jpa.*属性显式配置 JPA 设置。例如,要创建和删除表,您可以将以下行添加到您的application.properties:

spring:
  jpa:
    hibernate.ddl-auto: "create-drop"

在视图中打开 EntityManager

如果您正在运行 Web 应用程序,Spring Boot 默认注册OpenEntityManagerInViewInterceptor以应用“在视图中打开 EntityManager”模式,以允许在 Web 视图中延迟加载。如果你不想要这种行为,你应该spring.jpa.open-in-viewfalse你的application.properties.

JDBC Repository

Spring Data 包括对 JDBC 的存储库支持,并将自动为CrudRepository. 对于更高级的查询,@Query提供了注释。

当必要的依赖项位于类路径上时,Spring Boot 将自动配置 Spring Data 的 JDBC 存储库。它们可以通过对spring-boot-starter-data-jdbc. 如有必要,您可以通过向应用程序添加@EnableJdbcRepositories注释或子类来控制 Spring Data JDBC 的配置。JdbcConfiguration

标签:10,springboot2.6,JPA,spring,数据库,SQL,datasource,Spring,Data
来源: https://blog.csdn.net/qq_15604349/article/details/122661170