国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用JDBC和Spring訪問關系數據

liaorio / 1259人閱讀

摘要:本指南將引導您完成使用訪問關系數據的過程。要在應用程序級別表示此數據,請創建一個類。存儲和檢索數據提供了一個名為的模板類,可以輕松使用關系數據庫和。自動加載并使其可用。使用的參數,以避免注入攻擊通過指示來綁定變量。

本指南將引導您完成使用Spring訪問關系數據的過程。

你要構建什么

您將使用Spring構建一個JdbcTemplate應用程序來訪問存儲在關系數據庫中的數據。

你需要什么

大約15分鐘

最喜歡的文本編輯器或IDE

JDK 1.8或更高版本

Gradle 4+或Maven 3.2+

您還可以將代碼直接導入IDE:

使用STS構建/導入入門指南

使用IntelliJ IDEA導入入門指南

如何完成本指南

與大多數Spring入門指南一樣,您可以從頭開始并完成每個步驟,或者您可以繞過您已熟悉的基本設置步驟。無論哪種方式,您最終都會使用工作代碼。

從頭開始,請繼續使用Gradle構建。

跳過基礎知識,請執行以下操作:

下載并解壓縮本指南的源存儲庫,或使用Git克隆它:

git clone https://github.com/spring-guides/gs-relational-data-access.git

進入gs-relational-data-access/initial

跳轉到創建Customer對象。

完成后,可以根據gs-relational-data-access/complete中的代碼檢查結果。

使用Gradle構建

首先,設置一個基本的構建腳本。在使用Spring構建應用程序時,您可以使用任何您喜歡的構建系統,但此處包含了使用Gradle和Maven所需的代碼。如果您不熟悉這兩者,請參閱使用Gradle構建Java項目或使用Maven構建Java項目。

創建目錄結構

在您選擇的項目目錄中,創建以下子目錄結構;例如,在*nix系統上使用mkdir -p src/main/java/hello:

└── src
    └── main
        └── java
            └── hello
創建Gradle構建文件

下面是最初的Gradle構建文件。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.3.RELEASE")
    }
}

apply plugin: "java"
apply plugin: "eclipse"
apply plugin: "idea"
apply plugin: "org.springframework.boot"
apply plugin: "io.spring.dependency-management"

bootJar {
    baseName = "gs-relational-data-access"
    version =  "0.1.0"
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile("org.springframework.boot:spring-boot-starter")
    compile("org.springframework:spring-jdbc")
    compile("com.h2database:h2")
    testCompile("junit:junit")
}

在Spring Boot gradle plugin提供了許多便捷的功能:

它收集類路徑上的所有jar并構建一個可運行的“über-jar”,這使得執行和傳輸服務更加方便。

它搜索public static void main()標記為可運行類的方法。

它提供了一個內置的依賴項解析器,它設置版本號以匹配Spring Boot依賴項。您可以覆蓋任何您希望的版本,但它將默認為Boot的所選版本集。

使用Maven構建

首先,設置一個基本的構建腳本。在使用Spring構建應用程序時,您可以使用任何您喜歡的構建系統,但此處包含了使用Maven所需的代碼。如果您不熟悉Maven,請參閱使用Maven構建Java項目。

創建目錄結構

在您選擇的項目目錄中,創建以下子目錄結構;例如,在*nix系統上使用mkdir -p src/main/java/hello:

└── src
    └── main
        └── java
            └── hello

pom.xml



    4.0.0

    org.springframework
    gs-relational-data-access
    0.1.0

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.3.RELEASE
    

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            com.h2database
            h2
        
    


    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

在Spring Boot gradle plugin提供了許多便捷的功能:

它收集類路徑上的所有jar并構建一個可運行的“über-jar”,這使得執行和傳輸服務更加方便。

它搜索public static void main()標記為可運行類的方法。

它提供了一個內置的依賴項解析器,它設置版本號以匹配Spring Boot依賴項。您可以覆蓋任何您希望的版本,但它將默認為Boot的所選版本集。

使用IDE構建

閱讀如何將本指南直接導入使用STS構建/導入入門指南。

閱讀使用IntelliJ IDEA導入入門指南中如何使用本指南。

創建一個Customer對象

您將在下面使用的簡單數據訪問邏輯管理客戶的名字和姓氏。要在應用程序級別表示此數據,請創建一個Customer類。

package hello;

public class Customer {
    private long id;
    private String firstName, lastName;

    public Customer(long id, String firstName, String lastName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    @Override
    public String toString() {
        return String.format(
                "Customer[id=%d, firstName="%s", lastName="%s"]",
                id, firstName, lastName);
    }

    // getters & setters omitted for brevity
}
存儲和檢索數據

Spring提供了一個名為JdbcTemplate的模板類,可以輕松使用SQL關系數據庫和JDBC。大多數JDBC代碼都陷入資源獲取,連接管理,異常處理和一般錯誤檢查之中,這與代碼要實現的內容完全無關,JdbcTemplate負責這一切。您所要做的就是專注于手頭的任務。

src/main/java/hello/Application.java

package hello;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@SpringBootApplication
public class Application implements CommandLineRunner {

    private static final Logger log = LoggerFactory.getLogger(Application.class);

    public static void main(String args[]) {
        SpringApplication.run(Application.class, args);
    }

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Override
    public void run(String... strings) throws Exception {

        log.info("Creating tables");

        jdbcTemplate.execute("DROP TABLE customers IF EXISTS");
        jdbcTemplate.execute("CREATE TABLE customers(" +
                "id SERIAL, first_name VARCHAR(255), last_name VARCHAR(255))");

        // Split up the array of whole names into an array of first/last names
        List splitUpNames = Arrays.asList("John Woo", "Jeff Dean", "Josh Bloch", "Josh Long").stream()
                .map(name -> name.split(" "))
                .collect(Collectors.toList());

        // Use a Java 8 stream to print out each tuple of the list
        splitUpNames.forEach(name -> log.info(String.format("Inserting customer record for %s %s", name[0], name[1])));

        // Uses JdbcTemplate"s batchUpdate operation to bulk load data
        jdbcTemplate.batchUpdate("INSERT INTO customers(first_name, last_name) VALUES (?,?)", splitUpNames);

        log.info("Querying for customer records where first_name = "Josh":");
        jdbcTemplate.query(
                "SELECT id, first_name, last_name FROM customers WHERE first_name = ?", new Object[] { "Josh" },
                (rs, rowNum) -> new Customer(rs.getLong("id"), rs.getString("first_name"), rs.getString("last_name"))
        ).forEach(customer -> log.info(customer.toString()));
    }
}

@SpringBootApplication 是一個便利注釋,添加了以下所有內容:

@Configuration 標記該類作為應用程序上下文的bean定義的源。

@EnableAutoConfiguration 告訴Spring Boot開始根據類路徑設置,其他bean和各種屬性設置添加bean。

@ComponentScan告訴Spring在包中尋找其他組件,配置和服務,允許它找到控制器。

main()方法使用Spring Boot的SpringApplication.run()方法來啟動應用程序。您是否注意到沒有一行XML?也沒有web.xml文件。此Web應用程序是100%純Java,您無需處理配置任何管道或基礎結構。

main()方法使用Spring Boot的SpringApplication.run()方法來啟動應用程序。您是否注意到沒有一行XML?也沒有web.xml文件。此Web應用程序是100%純Java,您無需處理配置任何管道或基礎結構。

Spring Boot支持H2,一種內存中的關系數據庫引擎,并自動創建連接。因為我們使用的是spring-jdbc,Spring Boot會自動創建一個JdbcTemplate。@Autowired自動加載JdbcTemplate并使其可用。

這個Application類實現了Spring Boot CommandLineRunner,這意味著它將run()在加載應用程序上下文后執行該方法。

首先,使用JdbcTemplate’s `execute方法安裝一些DDL 。

其次,您獲取字符串列表并使用Java 8流,將它們拆分為Java數組中的firstname/lastname對。

然后使用JdbcTemplate’s `batchUpdate方法在新創建的表中安裝一些記錄。方法調用的第一個參數是查詢字符串,最后一個參數(Objects 的數組)包含要替換為“?”字符的查詢的變量。

對于單個插入語句,JdbcTemplate’s `insert方法很好。但對于多個,最好使用batchUpdate。

使用?的參數,以避免SQL注入攻擊通過指示JDBC來綁定變量。

最后,使用query方法在表中搜索與條件匹配的記錄。您再次使用“?”參數為查詢創建參數,在進行調用時傳入實際值。最后一個參數是用于將每個結果行轉換為新Customer對象的Java 8 lambda 。

Java 8 lambdas很好地映射到單個方法接口,如Spring的RowMapper。如果您使用的是Java 7或更早版本,則可以輕松插入匿名接口實現,并具有與lambda expresion正文所包含的相同的方法體,并且它可以毫不費力地使用Spring。

構建可執行的JAR

您可以使用Gradle或Maven從命令行運行該應用程序。或者,您可以構建一個包含所有必需依賴項,類和資源的可執行JAR文件,并運行該文件。這使得在整個開發生命周期中,跨不同環境等將服務作為應用程序發布,版本和部署變得容易。

如果您使用的是Gradle,則可以使用運行該應用程序./gradlew bootRun。或者您可以使用構建JAR文件./gradlew build。然后你可以運行JAR文件:

java -jar build/libs/gs-relational-data-access-0.1.0.jar

如果您使用的是Maven,則可以使用該應用程序運行該應用程序./mvnw spring-boot:run。或者您可以使用構建JAR文件./mvnw clean package。然后你可以運行JAR文件:

java -jar target/gs-relational-data-access-0.1.0.jar

上面的過程將創建一個可運行的JAR。您也可以選擇構建經典WAR文件。

顯示日志輸出,您可以從日志中看到它在后臺線程上。您應該每隔5秒鐘看到計劃任務:

2015-06-19 10:58:31.152  INFO 67731 --- [           main] hello.Application                        : Creating tables
2015-06-19 10:58:31.219  INFO 67731 --- [           main] hello.Application                        : Inserting customer record for John Woo
2015-06-19 10:58:31.220  INFO 67731 --- [           main] hello.Application                        : Inserting customer record for Jeff Dean
2015-06-19 10:58:31.220  INFO 67731 --- [           main] hello.Application                        : Inserting customer record for Josh Bloch
2015-06-19 10:58:31.220  INFO 67731 --- [           main] hello.Application                        : Inserting customer record for Josh Long
2015-06-19 10:58:31.230  INFO 67731 --- [           main] hello.Application                        : Querying for customer records where first_name = "Josh":
2015-06-19 10:58:31.242  INFO 67731 --- [           main] hello.Application                        : Customer[id=3, firstName="Josh", lastName="Bloch"]
2015-06-19 10:58:31.242  INFO 67731 --- [           main] hello.Application                        : Customer[id=4, firstName="Josh", lastName="Long"]
2015-06-19 10:58:31.244  INFO 67731 --- [           main] hello.Application                        : Started Application in 1.693 seconds (JVM running for 2.054)
概要

恭喜!您剛剛使用Spring開發了一個簡單的JDBC客戶端。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73180.html

相關文章

  • 數據庫連接池

    摘要:數據庫連接池的基本原理是在內部對象池中維護一定數量的數據庫連接,并對外暴露數據庫連接獲取和返回方法。統一的連接管理,避免數據庫連接泄漏在較為完備的數據庫連接池實現中,可根據預先的連接占用超時設定,強制收回被占用連接。 一、數據庫連接池的原理 基本原理 對于一個簡單的數據庫應用,由于對于數據庫的訪問不是很頻繁。這時可以簡單地在需要訪問數據庫時,就新創建一個連接,用完后就關閉它,這樣做也...

    olle 評論0 收藏0
  • 數據庫連接池

    摘要:數據庫連接池的基本原理是在內部對象池中維護一定數量的數據庫連接,并對外暴露數據庫連接獲取和返回方法。統一的連接管理,避免數據庫連接泄漏在較為完備的數據庫連接池實現中,可根據預先的連接占用超時設定,強制收回被占用連接。 一、數據庫連接池的原理 基本原理 對于一個簡單的數據庫應用,由于對于數據庫的訪問不是很頻繁。這時可以簡單地在需要訪問數據庫時,就新創建一個連接,用完后就關閉它,這樣做也...

    Tamic 評論0 收藏0
  • 談談Spring-Data的那些事兒

    摘要:什么是呢全稱,是提出的一個對象持久化規范,各應用服務器自主選擇具體實現。僅僅只是一個規范,而不是產品使用本身是不能做到持久化的。只要提供了持久化類與表的映射關系,框架在運行時就能參照映射文件的信息,把對象持久化到數據庫中。 我們在進行事務處理往往需要和數據庫進行交互,這其中有關系型數據庫(MySql,Sql Server,Oracle)或者是非關系型數據庫(Redis,Hadhoop)...

    chinafgj 評論0 收藏0

發表評論

0條評論

liaorio

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<