摘要:本指南將引導您完成使用訪問關系數據的過程。要在應用程序級別表示此數據,請創建一個類。存儲和檢索數據提供了一個名為的模板類,可以輕松使用關系數據庫和。自動加載并使其可用。使用的參數,以避免注入攻擊通過指示來綁定變量。
本指南將引導您完成使用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
@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
摘要:什么是呢全稱,是提出的一個對象持久化規范,各應用服務器自主選擇具體實現。僅僅只是一個規范,而不是產品使用本身是不能做到持久化的。只要提供了持久化類與表的映射關系,框架在運行時就能參照映射文件的信息,把對象持久化到數據庫中。 我們在進行事務處理往往需要和數據庫進行交互,這其中有關系型數據庫(MySql,Sql Server,Oracle)或者是非關系型數據庫(Redis,Hadhoop)...
閱讀 1483·2023-04-25 15:40
閱讀 2834·2021-08-11 11:15
閱讀 2273·2019-08-26 13:48
閱讀 2844·2019-08-26 12:18
閱讀 2448·2019-08-23 18:23
閱讀 2905·2019-08-23 17:01
閱讀 2978·2019-08-23 16:29
閱讀 1101·2019-08-23 15:15