JPA(Java Persistence API)Java持久化API,是 Java 持久化的標準規範,Hibernate是持久化規範的技術實現,而Spring Data JPA是在 Hibernate 基礎上封裝的一款框架。JPA做爲標準,實際上並無說侷限於某個固定的數據源,事實上mysql,mongo, solr都是ok的。接下來咱們將介紹下springboot結合jpa 來實現mysql的curd以及更加複雜一點的sql支持java
<!-- more -->mysql
jpa系列教程將包含如下幾塊git
本篇爲開始第一篇,先搭建一個能夠愉快玩耍的jpa項目github
咱們選擇的數據庫爲mysql,因此有必要先安裝一下,這裏跳過mysql的安裝教程,直接進入springboot項目的搭建spring
咱們這裏選擇的是2.0.4.RELEASE
版本進行演示sql
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from update --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.45</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </pluginManagement> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
上面的pom依賴中,關鍵的是下面兩個, 第一個引入的是jpa相關包,後面那個則是mysql的鏈接依賴,至關於指定操做mysql數據庫數據庫
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
建立一個測試表進行後續的讀寫操做,爲了後續的事物講解方便,咱們建立一個表,裏面存了每一個人的錢json
CREATE TABLE `money` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL DEFAULT '' COMMENT '用戶名', `money` int(26) NOT NULL DEFAULT '0' COMMENT '錢', `is_deleted` tinyint(1) NOT NULL DEFAULT '0', `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間', `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', PRIMARY KEY (`id`), KEY `name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
在表中隨意插入幾條數據,以方便後面使用api
INSERT INTO `money` (`id`, `name`, `money`, `is_deleted`, `create_at`, `update_at`) VALUES (1, '一灰灰blog', 100, 0, '2019-04-18 17:01:40', '2019-04-18 17:01:40'), (2, '一灰灰2', 200, 0, '2019-04-18 17:01:40', '2019-04-18 17:01:40');
建立springboot工程以後,添加mysql的相關配置,在resources目錄下,新建文件 application.properties
springboot
## DataSource spring.datasource.url=jdbc:mysql://127.0.0.1:3306/story?useUnicode=true&characterEncoding=UTF-8&useSSL=false #spring.datasource.driver-class-name= com.mysql.jdbc.Driver spring.datasource.username=root spring.datasource.password=
根據JPA的通常使用姿式,咱們須要針對上面的表,建立一個對應的POJO對象,將它們關聯起來,代碼以下:
@Entity
, @Table
, @Column
, @Id
, @GeneratedValue
package com.git.hui.boot.jpa.entity; import lombok.Data; import javax.persistence.*; import java.sql.Date; /** * Created by @author yihui in 21:01 19/6/10. */ @Data @Entity @Table(name = "money") public class MoneyPO { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(name = "name") private String name; @Column(name = "money") private Long money; @Column(name = "is_deleted") private Byte isDeleted; @Column(name = "create_at") private Date createAt; @Column(name = "update_at") private Date updateAt; }
表結構定義完畢以後,接下來就是定義db的操做api,jpa的使用,經過方法名來解析出對應的sql,咱們這裏定義一個簡單的Money表的操做API:
MoneyDemoRepository
繼承自 JpaRepository
package com.git.hui.boot.jpa.repository; import com.git.hui.boot.jpa.entity.MoneyPO; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; /** * Created by @author yihui in 21:01 19/6/10. */ public interface MoneyDemoRepository extends JpaRepository<MoneyPO, Integer> { }
上面兩個定義完畢以後,不須要其餘的操做,就能夠進行測試環境了,上面這個Repository提供了一些簡單的操做
package com.git.hui.boot.jpa; import com.git.hui.boot.jpa.demo.JpaQueryDemo; import com.git.hui.boot.jpa.entity.MoneyPO; import com.git.hui.boot.jpa.repository.MoneyDemoRepository; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * Created by @author yihui in 20:58 19/6/10. */ @SpringBootApplication public class Application { public Application(MoneyDemoRepository moneyDemoRepository) { MoneyPO moneyPO = moneyDemoRepository.findById(1).get(); System.out.println(moneyPO); } public static void main(String[] args) { SpringApplication.run(Application.class); } }
針對上面的測試case進行簡單的說明,前面定義了一個POJO對象和一個RepositoryAPI
,咱們想直接操做對應的表,須要藉助這個RepositoryAPI
對象,可是它是接口類型,咱們無法直接使用的,由於咱們是在Spring生態體系中,因此能夠直接經過IoC注入方式使用
因此上面的測試中,MoneyDemoRepository
對象其實是由框架生成的一個代理對象,下面咱們看下執行結果
從上面的步驟下來,會發現搭建一個jpa的項目工程屬於比較簡單的過程,添加必要的依賴,稍微注意的是兩個
RepositoryApi
繼承自org.springframework.data.repository.CrudRepository
RepositoryApi
對象,而後能夠愉快的進行db操做盡信書則不如,以上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
下面一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛