iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot是如何使用SQL数据库的?
  • 562
分享到

SpringBoot是如何使用SQL数据库的?

2024-04-02 19:04:59 562人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

一、配置数据源 Java 的javax.sql.DataSource接口提供了处理数据库连接的标准方法。 1.1.嵌入式数据库支持 使用内存中的嵌入式数据库开发应用程序通常很方便。显

一、配置数据源

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数据库内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot是如何使用SQL数据库的?

本文链接: https://www.lsjlt.com/news/128857.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot是如何使用SQL数据库的?
    一、配置数据源 Java 的javax.sql.DataSource接口提供了处理数据库连接的标准方法。 1.1.嵌入式数据库支持 使用内存中的嵌入式数据库开发应用程序通常很方便。显...
    99+
    2024-04-02
  • sql如何断开数据库的使用
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-06-06
  • 如何使用SQL数据库发mail
    这篇文章主要介绍如何使用SQL数据库发mail,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 一、先启动邮件服务SQL SCRIPTS exe...
    99+
    2024-04-02
  • 如何使用SQL操作MySQL数据库
    本篇内容主要讲解“如何使用SQL操作MySQL数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用SQL操作MySQL数据库”吧!从本节开始正式介绍各种...
    99+
    2024-04-02
  • 如何使用PL/SQL监控数据库
    在Oracle数据库中,可以使用PL/SQL语言编写监控脚本来监控数据库的性能、状态和运行情况。以下是一些示例监控数据库的方法: ...
    99+
    2024-05-08
    PL/SQL
  • SpringBoot如何使用H2嵌入式数据库
    小编给大家分享一下SpringBoot如何使用H2嵌入式数据库,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!添加maven依赖<dependency>...
    99+
    2023-06-25
  • springboot 如何使用jedis连接Redis数据库
    springboot 使用jedis连接Redis数据库 1. 在 pom.xml 配置文件中添加依赖 <!-- redis 依赖 --> <...
    99+
    2024-04-02
  • 如何使用connectionStrings连接SQL Server数据库
    要使用connectionStrings连接SQL Server数据库,您需要向web.config文件或app.config文件添...
    99+
    2023-08-23
    SQL Server数据库
  • 在Oracle数据库中如何使用SQL*Plus
    本篇内容介绍了“在Oracle数据库中如何使用SQL*Plus”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • sql数据库正在使用如何还原
    要还原 SQL 数据库,可以按照以下步骤进行操作: 确保数据库已经备份好,并且备份文件是可用的。 打开 SQL Server...
    99+
    2023-10-24
    sql数据库
  • 如何在SQL数据库中使用主键
    这篇文章将为大家详细讲解有关如何在SQL数据库中使用主键,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。SQL数据库中主键(Primary Key) 中的每一...
    99+
    2024-04-02
  • mysql数据库如何使用sql新建表
    在 mysql 中创建新表需要按以下步骤进行:连接到数据库;编写 create table 语句,指定表名、列名、数据类型,并可设置约束和默认值;执行 create table 语句;使...
    99+
    2024-04-22
    mysql
  • 如何在SpringBoot项目中使用Oracle11g数据库
    在SpringBoot项目中使用Oracle11g数据库 具体步骤如下: 1:下载ojdbc6.jar ,随便放个英文目录位置就好 2:命令行下输入下行,注意最后-Dfile 为自己...
    99+
    2024-04-02
  • 如何在SpringBoot项目中使用redis数据库
    今天就跟大家聊聊有关如何在SpringBoot项目中使用redis数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。REmote DIctionary Server(Redis) ...
    99+
    2023-06-07
  • SpringBoot如何使用JdbcTemplate访问操作数据库
    这篇文章给大家分享的是有关SpringBoot如何使用JdbcTemplate访问操作数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Spring对数据库的操作在jdbc上s面做了深层次的封装,使用sprin...
    99+
    2023-06-29
  • SQL数据库的使用技巧
    本篇内容主要讲解“SQL数据库的使用技巧”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL数据库的使用技巧”吧!应该使用哪种方法创建用户?  创建用户有几种方...
    99+
    2024-04-02
  • 数据库SQL语句的使用
    这篇文章主要讲解了“数据库SQL语句的使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库SQL语句的使用”吧!1、创建数据库 create ...
    99+
    2024-04-02
  • Yii2中mssql和sql server数据库如何使用
    本篇文章给大家分享的是有关Yii2中mssql和sql server数据库如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  1.首先找...
    99+
    2024-04-02
  • IDEA中如何使用SQL和数据库工具
    在IDEA中可以使用SQL和数据库工具来连接和操作数据库,以下是操作步骤: 打开IDEA,点击菜单栏的View -> To...
    99+
    2024-04-30
    IDEA SQL
  • 如何使用PL/SQL进行数据库设计
    数据库设计是一个重要的过程,它涉及到数据库结构和数据的组织。PL/SQL是一种用于Oracle数据库管理系统的编程语言,它可以用于创...
    99+
    2024-05-07
    PL/SQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作