一、配置数据源

java 的javax.sql.datasource接口提供了处理数据库连接的标准方法。

1.1.嵌入式数据库支持

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

spring boot 可以自动配置嵌入式h2、hsql和derby数据库。您无需提供任何连接 url。您只需要包含对要使用的嵌入式数据库的构建依赖项。如果类路径上有多个嵌入式数据库,设置spring.datasource.embedded-database-connection配置属性来控制使用哪个。将该属性设置为none禁用嵌入式数据库的自动配置。

如果您在测试中使用此功能,您可能会注意到,无论您使用多少应用程序上下文,整个测试套件都会重用同一个数据库。如果要确保每个上下文都有单独的嵌入式数据库,则应设置spring.datasource.generate-unique-name为true。

<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>

1.2.连接到生产数据库

使用datasource池自动配置生产数据库连接。

1.3.数据源配置

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

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

spring boot 可以从 url 中推断出大多数数据库的 jdbc 驱动程序类。如果需要指定特定的类,可以使用该spring.datasource.driver-class-name属性。

# tomcat 连接池配置
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.test-on-borrow=true

1.4.支持的连接池

1.我们更喜欢hikaricp,因为它的性能和并发性。如果 hikaricp 可用,我们总是选择它。

2.否则,如果 tomcat datasource池可用,我们将使用它。

3.否则,如果commons dbcp2可用,我们就使用它。

4.如果 hikaricp、tomcat 和 dbcp2 都不可用,而 oracle ucp 可用,我们就使用它。

  • hikaricp
  • tomcat pooling datasource
  • commons dbcp2
  • oracle ucp & oracledatasource
  • spring framework’s simpledriverdatasource
  • h2 jdbcdatasource
  • postgresql pgsimpledatasource

1.5.连接到 jndi 数据源

如果您将 spring boot 应用程序部署到应用程序服务器,您可能希望使用应用程序服务器的内置功能配置和管理数据源,并使用 jndi 访问它。

spring.datasource.jndi-name=java:jboss/datasources/customers

二、使用 jdbctemplate

spring jdbctemplate和namedparameterjdbctemplate类是自动配置的。可以通过@autowire直接引用。

@component
public class mybean {
 
    private final jdbctemplate jdbctemplate;
 
    public mybean(jdbctemplate jdbctemplate) {
        this.jdbctemplate = jdbctemplate;
    }
 
    public void dosomething() {
        this.jdbctemplate ...
    }
 
}
 
spring.jdbc.template.max-rows=500

三、jpa 和 spring data jpa

java persistence api 是一种标准技术,可让您将对象“映射”到关系数据库。该spring-boot-starter-data-jpa pom提供了上手的快捷方式。它提供以下关键依赖项:

  • hibernate:最流行的 jpa 实现之一。
  • spring data jpa:帮助您实现基于 jpa 的存储库。
  • spring orm:来自 spring 框架的核心 orm 支持。

3.1.实体类

@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 shouldn't 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
 
}

3.2.spring data jpa 存储库

spring data jpa存储库是您可以定义以访问数据的接口。jpa 查询是根据您的方法名称自动创建的。

public interface cityrepository extends repository<city, long> {
 
    page<city> findall(pageable pageable);
 
    city findbynameandstateallignoringcase(string name, string state);
 
}

spring data jpa 存储库支持三种不同的引导模式:default, deferred, and lazy。

要启用延迟或延迟引导,请将spring.data.jpa.repositories.bootstrap-mode属性分别设置为deferred或lazy。

3.3.创建和删除 jpa 数据库

默认情况下,仅当您使用嵌入式数据库(h2、hsql 或 derby)时,才会自动创建 jpa 数据库。您可以使用spring.jpa.*属性显式配置 jpa 设置。

spring.jpa.hibernate.ddl-auto=create-drop

spring.jpa.properties.hibernate[globally_quoted_identifiers]=true

3.4.在视图中打开 entitymanager

如果您正在运行 web 应用程序,spring boot 默认注册openentitymanagerinviewinterceptor以应用“在视图中打开 entitymanager”模式,以允许在 web 视图中延迟加载。如果你不希望这种行为,你应该设置spring.jpa.open-in-view=false。

四、spring data jdbc

spring data 包括对 jdbc 的存储库支持,并将自动为crudrepository. 对于更高级的查询,@query提供了注释。

当必要的依赖关系在类路径上时,spring boot 将自动配置 spring data 的 jdbc 存储库。它们可以添加到您的项目中,并且只依赖于spring-boot-starter-data-jdbc。

五、使用 h2 的 web 控制台

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

  • 您正在开发基于 servlet 的 web 应用程序。
  • com.h2database:h2 在类路径上。
  • 您正在使用spring boot 的开发人员工具。

如果您没有使用 spring boot 的开发人员工具,但仍想使用 h2 的控制台,则可以将spring.h2.console.enabled属性的值配置为true。

h2 控制台仅用于在开发期间使用,因此您应注意确保spring.h2.console.enabled未将其在生产中设置为true。

默认情况下,控制台位于/h2-console。您可以使用该spring.h2.console.path属性自定义控制台的路径。

六、使用 jooq

jooq 面向对象查询 ( jooq ) 是data geekery 的一款流行产品,它从您的数据库生成 java 代码,并允许您通过其流畅的 api 构建类型安全的 sql 查询。商业版和开源版都可以与 spring boot 一起使用。

6.1.代码生成

为了使用 jooq 类型安全查询,您需要从数据库模式生成 java 类。您可以按照jooq 用户手册中的说明进行操作。如果您使用jooq-codegen-maven插件并且您还使用spring-boot-starter-parent“父 pom”,则可以安全地省略插件的<version>标签。您还可以使用 spring boot 定义的版本变量(例如h2.version)来声明插件的数据库依赖项。

<plugin>
    <groupid>org.jooq</groupid>
    <artifactid>jooq-codegen-maven</artifactid>
    <executions>
        ...
    </executions>
    <dependencies>
        <dependency>
            <groupid>com.h2database</groupid>
            <artifactid>h2</artifactid>
            <version>${h2.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <jdbc>
            <driver>org.h2.driver</driver>
            <url>jdbc:h2:~/yourdatabase</url>
        </jdbc>
        <generator>
            ...
        </generator>
    </configuration>
</plugin>

6.2.使用 dslcontext

jooq 提供的 fluent api 是通过org.jooq.dslcontext接口发起的。spring boot 将dslcontext自动配置为 spring bean 并将其连接到您的应用程序datasource。要使用dslcontext,您可以注入它。

@component
public class mybean {
 
    private final dslcontext create;
 
    public mybean(dslcontext dslcontext) {
        this.create = dslcontext;
    }
 
 
    public list<gregoriancalendar> authorsbornafter1980() {
        return this.create.selectfrom(author)
            .where(author.date_of_birth.greaterthan(new gregoriancalendar(1980, 0, 1)))
            .fetch(author.date_of_birth);
    }
}

6.3.jooq sql 方言

除非spring.jooq.sql-dialect已配置该属性,否则spring boot 会确定用于数据源的 sql 方言。如果 spring boot 无法检测到方言,它会使用default。

spring boot 只能自动配置 jooq 开源版本支持的方言。

6.4.自定义 jooq

更高级的自定义可以通过定义您自己的defaultconfigurationcustomizer bean来实现,该 bean 将创建org.jooq.configuration。这优先于自动配置应用的任何内容。

七、使用 r2dbc

reactive relational database connectivity ( r2dbc ) 项目为关系数据库带来了反应式编程 api。r2dbc io.r2dbc.spi.connection提供了一种使用非阻塞数据库连接的标准方法。连接是通过connectionfactory提供的datasource,类似于jdbc。connectionfactory配置由spring.r2dbc.*。

spring.r2dbc.url=r2dbc:postgresql://localhost/test
spring.r2dbc.username=dbuser
spring.r2dbc.password=dbpass

您不需要指定驱动程序类名,因为 spring boot 从 r2dbc 的连接工厂发现中获取驱动程序。

@configuration(proxybeanmethods = false)
public class myr2dbcconfiguration {
 
    @bean
    public connectionfactoryoptionsbuildercustomizer connectionfactoryportcustomizer() {
        return (builder) -> builder.option(connectionfactoryoptions.port, 5432);
    }
 
}
 
@configuration(proxybeanmethods = false)
public class mypostgresr2dbcconfiguration {
 
    @bean
    public connectionfactoryoptionsbuildercustomizer postgrescustomizer() {
        map<string, string> options = new hashmap<>();
        options.put("lock_timeout", "30s");
        options.put("statement_timeout", "60s");
        return (builder) -> builder.option(postgresqlconnectionfactoryprovider.options, options);
    }
 

7.1.嵌入式数据库支持

与jdbc 支持类似,spring boot 可以自动配置嵌入式数据库以供响应式使用。您无需提供任何连接 url。您只需要包含对要使用的嵌入式数据库的构建依赖项。

<dependency>
    <groupid>io.r2dbc</groupid>
    <artifactid>r2dbc-h2</artifactid>
    <scope>runtime</scope>
</dependency>

如果您在测试中使用此功能,您可能会注意到,无论您使用多少应用程序上下文,整个测试套件都会重用同一个数据库。如果要确保每个上下文都有单独的嵌入式数据库,则应设置spring.r2dbc.generate-unique-name为true。

7.2.使用数据库客户端

@component
public class mybean {
 
    private final databaseclient databaseclient;
 
    public mybean(databaseclient databaseclient) {
        this.databaseclient = databaseclient;
    }
 
    public flux<map<string, object>> somemethod() {
        return this.databaseclient.sql("select * from user").fetch().all();
    }
 
}

7.3.spring data r2dbc 存储库

spring data r2dbc存储库是您可以定义以访问数据的接口。查询是根据您的方法名称自动创建的。对于更复杂的查询,您可以使用 spring data 的query注解来注解您的方法。

spring data 存储库通常从repository或crudrepository接口扩展。

public interface cityrepository extends repository<city, long> {
 
    mono<city> findbynameandstateallignoringcase(string name, string state);
 
}

到此这篇关于springboot是如何使用sql数据库的?的文章就介绍到这了,更多相关springboot使用sql数据库内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!