springboot2.6.2系列教程之SQL数据库-10
2022/1/24 19:10:20
本文主要是介绍springboot2.6.2系列教程之SQL数据库-10,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
- SQL 数据库
- 配置数据源
- 嵌入式数据库支持
- 连接到生产数据库
- 数据源配置
- 支持的连接池
- 连接到 JNDI 数据源
- 使用 JdbcTemplate
- JPA 和 Spring Data JPA
- 实体类
- 存储库
- 创建和删除 JPA 数据库
- 在视图中打开 EntityManager
- JDBC Repository
SQL 数据库
Spring 框架为使用 SQL 数据库提供了广泛的支持,从使用直接 JDBC 访问到JdbcTemplate
完整的“对象关系映射”技术,如 Hibernate。 Spring Data提供了额外级别的功能:Repository
直接从接口创建实现并使用约定从您的方法名称生成查询。
配置数据源
Java 的javax.sql.DataSource
接口提供了一种处理数据库连接的标准方法。传统上,“数据源”使用 URL
以及一些凭据来建立数据库连接。
嵌入式数据库支持
使用内存嵌入式数据库开发应用程序通常很方便。显然,内存数据库不提供持久存储。您需要在应用程序启动时填充数据库,并准备在应用程序结束时丢弃数据。
Spring Boot 可以自动配置嵌入式H2、HSQL和Derby数据库。您无需提供任何连接 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 使用以下算法来选择特定的实现:
- 我们更喜欢HikariCP的性能和并发性。如果 HikariCP 可用,我们总是选择它。
- 否则,如果 Tomcat 池
DataSource
可用,我们就使用它。 - 否则,如果Commons DBCP2可用,我们将使用它。
- 如果 HikariCP、Tomcat 和 DBCP2 都不可用,而如果 Oracle UCP 可用,我们就使用它。
连接到 JNDI 数据源
如果您将 Spring Boot 应用程序部署到 Application Server,您可能希望使用 Application Server 的内置功能配置和管理 DataSource,并使用 JNDI 访问它。
该spring.datasource.jndi-name
属性可用作替代方法,spring.datasource.url
以spring.datasource.username
从spring.datasource.password
特定DataSource
JNDI 位置访问 。例如,以下部分application.properties
显示了如何访问 JBoss AS 定义的DataSource
:
spring: datasource: jndi-name: "java:jboss/datasources/customers"
使用 JdbcTemplate
SpringJdbcTemplate
和NamedParameterJdbcTemplate
类是自动配置的,您可以@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-jpa
POM 提供了一种快速入门的方法。它提供以下关键依赖项:
- Hibernate:最流行的 JPA 实现之一。
- Spring Data JPA:帮助您实现基于 JPA 的存储库。
- Spring ORM:来自 Spring Framework 的核心 ORM 支持。
实体类
传统上,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 存储库通常从Repository
orCrudRepository
接口扩展而来。如果您使用自动配置,则从包含您的主要配置类(用@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
属性分别设置为deferred
或lazy
。当使用延迟或延迟引导时,自动配置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-view
在false
你的application.properties
.
JDBC Repository
Spring Data 包括对 JDBC 的存储库支持,并将自动为CrudRepository
. 对于更高级的查询,@Query
提供了注释。
当必要的依赖项位于类路径上时,Spring Boot 将自动配置 Spring Data 的 JDBC 存储库。它们可以通过对spring-boot-starter-data-jdbc
. 如有必要,您可以通过向应用程序添加@EnableJdbcRepositories
注释或子类来控制 Spring Data JDBC 的配置。JdbcConfiguration
这篇关于springboot2.6.2系列教程之SQL数据库-10的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)