SpringBoot使用SQL数据库的方式是什么-创新互联
这篇文章主要介绍“SpringBoot使用SQL数据库的方式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot使用SQL数据库的方式是什么”文章能帮助大家解决问题。
创新互联公司,为您提供网站建设、成都网站制作、网站营销推广、网站开发设计,对服务搅拌罐车等多个行业拥有丰富的网站建设及推广经验。创新互联公司网站建设公司成立于2013年,提供专业网站制作报价服务,我们深知市场的竞争激烈,认真对待每位客户,为客户提供赏心悦目的作品。 与客户共同发展进步,是我们永远的责任!一、配置数据源
Java 的javax.sql.DataSource接口提供了处理数据库连接的标准方法。
1.1.嵌入式数据库支持
使用内存中的嵌入式数据库开发应用程序通常很方便。显然,内存数据库不提供持久存储。您需要在应用程序启动时填充数据库,并准备在应用程序结束时丢弃数据。
Spring Boot 可以自动配置嵌入式H2、HSQL和Derby数据库。您无需提供任何连接 URL。您只需要包含对要使用的嵌入式数据库的构建依赖项。如果类路径上有多个嵌入式数据库,设置spring.datasource.embedded-database-connection配置属性来控制使用哪个。将该属性设置为none禁用嵌入式数据库的自动配置。
如果您在测试中使用此功能,您可能会注意到,无论您使用多少应用程序上下文,整个测试套件都会重用同一个数据库。如果要确保每个上下文都有单独的嵌入式数据库,则应设置spring.datasource.generate-unique-name为true。
org.springframework.boot spring-boot-starter-data-jpa org.hsqldb hsqldb runtime
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{ Page 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.h3database:h3 在类路径上。
您正在使用Spring Boot 的开发人员工具。
如果您没有使用 Spring Boot 的开发人员工具,但仍想使用 H2 的控制台,则可以将spring.h3.console.enabled属性的值配置为true。
H2 控制台仅用于在开发期间使用,因此您应注意确保spring.h3.console.enabled未将其在生产中设置为true。
默认情况下,控制台位于/h3-console。您可以使用该spring.h3.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”,则可以安全地省略插件的
org.jooq jooq-codegen-maven ... com.h3database h3 ${h3.version} org.h3.Driver jdbc:h3:~/yourdatabase ...
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 ListauthorsBornAfter1980() { 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() { Mapoptions = 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。您只需要包含对要使用的嵌入式数据库的构建依赖项。
io.r2dbc r2dbc-h3 runtime
如果您在测试中使用此功能,您可能会注意到,无论您使用多少应用程序上下文,整个测试套件都会重用同一个数据库。如果要确保每个上下文都有单独的嵌入式数据库,则应设置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
7.3.Spring Data R2DBC 存储库
Spring Data R2DBC存储库是您可以定义以访问数据的接口。查询是根据您的方法名称自动创建的。对于更复杂的查询,您可以使用 Spring Data 的Query注解来注解您的方法。
Spring Data 存储库通常从Repository或CrudRepository接口扩展。
public interface CityRepository extends Repository{ Mono findByNameAndStateAllIgnoringCase(String name, String state); }
关于“SpringBoot使用SQL数据库的方式是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。
网站栏目:SpringBoot使用SQL数据库的方式是什么-创新互联
分享链接:http://myzitong.com/article/egioj.html