欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot是如何使用SQL數據庫的?

 更新時間:2021年06月22日 16:06:18   作者:陳濤龍  
今天給大家?guī)淼氖顷P于Springboot的相關知識,文章圍繞著SpringBoot是如何使用SQL數據庫的展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下

一、配置數據源

Java 的javax.sql.DataSource接口提供了處理數據庫連接的標準方法。

1.1.嵌入式數據庫支持

使用內存中的嵌入式數據庫開發(fā)應用程序通常很方便。顯然,內存數據庫不提供持久存儲。您需要在應用程序啟動時填充數據庫,并準備在應用程序結束時丟棄數據。

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,因為它的性能和并發(fā)性。如果 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 查詢是根據您的方法名稱自動創(chuàng)建的。

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.創(chuàng)建和刪除 JPA 數據庫

默認情況下,僅當您使用嵌入式數據庫(H2、HSQL 或 Derby)時,才會自動創(chuàng)建 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數據庫提供了一個基于瀏覽器的控制臺,自動為您配置。當滿足以下條件時,控制臺會自動配置:

  • 您正在開發(fā)基于 servlet 的 Web 應用程序。
  • com.h2database:h2 在類路徑上。
  • 您正在使用Spring Boot 的開發(fā)人員工具。

如果您沒有使用 Spring Boot 的開發(fā)人員工具,但仍想使用 H2 的控制臺,則可以將spring.h2.console.enabled屬性的值配置為true。

H2 控制臺僅用于在開發(fā)期間使用,因此您應注意確保spring.h2.console.enabled未將其在生產中設置為true。

默認情況下,控制臺位于/h2-console。您可以使用該spring.h2.console.path屬性自定義控制臺的路徑。

六、使用 jOOQ

jOOQ 面向對象查詢 ( jOOQ ) 是Data Geekery 的一款流行產品,它從您的數據庫生成 Java 代碼,并允許您通過其流暢的 API 構建類型安全的 SQL 查詢。商業(yè)版和開源版都可以與 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接口發(fā)起的。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 將創(chuàng)建org.jooq.Configuration。這優(yōu)先于自動配置應用的任何內容。

七、使用 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 的連接工廠發(fā)現中獲取驅動程序。

@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存儲庫是您可以定義以訪問數據的接口。查詢是根據您的方法名稱自動創(chuàng)建的。對于更復雜的查詢,您可以使用 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數據庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MyBatis-Plus如何通過注解使用TypeHandler

    MyBatis-Plus如何通過注解使用TypeHandler

    這篇文章主要介紹了MyBatis-Plus如何通過注解使用TypeHandler,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Kotlin 基礎語法詳細介紹

    Kotlin 基礎語法詳細介紹

    這篇文章主要介紹了Kotlin 基礎語法詳細介紹的相關資料,需要的朋友可以參考下
    2017-05-05
  • Java Swing中的JButton、JComboBox、JList和JColorChooser組件使用案例

    Java Swing中的JButton、JComboBox、JList和JColorChooser組件使用案例

    這篇文章主要介紹了Java Swing中的按鈕(JButton)、組合框(JComboBox)、下拉列表(JList)和顏色選擇器(JColorChooser)組件使用案例,需要的朋友可以參考下
    2014-10-10
  • 解決引用slf4j中Logger.info只打印出文字沒有數據的問題

    解決引用slf4j中Logger.info只打印出文字沒有數據的問題

    這篇文章主要介紹了解決引用slf4j中Logger.info只打印出文字沒有數據的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringMVC的注解@RequestMapping屬性及使用

    SpringMVC的注解@RequestMapping屬性及使用

    這篇文章主要為大家介紹了SpringMVC注解@RequestMapping屬性及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • java15新功能的詳細講解

    java15新功能的詳細講解

    這篇文章主要介紹了java15的新功能,雖然java15并不是長期支持的版本,但是很多新功能還是很有用的。感興趣的小伙伴可以參考一下
    2021-08-08
  • java 單例模式的實例詳解

    java 單例模式的實例詳解

    這篇文章主要介紹了java 單例模式的實例詳解的相關資料,希望通過本文能幫助大家徹底理解掌握這部分內容,需要的朋友可以參考下
    2017-10-10
  • 玩轉spring boot 快速開始(1)

    玩轉spring boot 快速開始(1)

    玩轉spring boot,快速開始spring boot學習,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • SpringBoot創(chuàng)建定時任務的示例詳解

    SpringBoot創(chuàng)建定時任務的示例詳解

    在Spring Boot中創(chuàng)建定時任務,通常使用@Scheduled注解,這是Spring框架提供的一個功能,允許你按照固定的頻率(如每天、每小時、每分鐘等)執(zhí)行某個方法,本文給大家介紹了SpringBoot創(chuàng)建定時任務的示例,需要的朋友可以參考下
    2024-04-04
  • Netty分布式flush方法刷新buffer隊列源碼剖析

    Netty分布式flush方法刷新buffer隊列源碼剖析

    這篇文章主要為大家介紹了Netty分布式flush方法刷新buffer隊列源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03

最新評論