Spring Boot + JPA學習總結

席潤發表於2019-02-13

專案建立

使用IDEA的Spring Initializr工具建立Spring Boot專案,建立時Dependencies中只選擇Web欄下web這一項。建立成功後先刪除專案目錄下不需要的.mvn、mvnw、mvnw.cmd這些檔案。

專案啟動

1、IDE中啟動

2、命令列終端中啟動

到專案目錄下:

1)mvn spring-boot:run

2)先編譯:mvn install

進入target目錄:cd target

檢視目錄下檔案:div

再執行jar包:java -jar filename.jar

這種方式可選擇配置檔案,在其後加引數,如下例:

java -jar filename.jar --spring .profiles.active=prod

打包時會進行單元測試,若需要跳過單元測試,則命令如下:

mvn clean package -Dmaven.test.skip=true

配置檔案

若在配置檔案中定義了變數,例:

name1: value1
name2: value2
name3: "name1: ${name1},name2: ${name2}"
複製程式碼

在controller中使用的方式為:

@Value("${name}")
private String name;
複製程式碼

prefix:
  property1: value1
  property2: value2
複製程式碼

再建立一個物件屬性類,加上註解:

@Component
@ConfigurationProperties(prefix = "prefix")
複製程式碼

在controller中通過物件來呼叫

配置mysql

在配置檔案中配置mysql,例:(配置檔案預設使用properties檔案,但推薦使用yml檔案)

spring:
  profiles:
    active: dev
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/db?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    username: root
    password: 123456
    jpa:
      hibernate:
        ddl-auto: update
      show-sql: true
複製程式碼

JPA

JPA(Java Persistence API)定義了一系列物件***持久化***的標準,目前實現這一規範的產品有Hibernate、TopLink等。

Spring-Data-Jpa是Spring對Hibernate的一個整合。

新增spring-boot-starter-data-jpa依賴包以及要使用的mysql依賴包mysql-connector-java。

Java Persistence API定義了一種定義,可以將常規的普通Java物件(有時被稱作POJO)對映到資料庫

建立物件類,該物件類需要新增一些註釋,

@Entity——指名這是一個實體Bean

@Table——指定了Entity所要對映的資料庫表,其中@Table.name()用來指定對映表的表名。如果預設@Table註釋,系統預設採用類名作為對映表的表名。

@Id——指定主鍵,id一般還要指定自增,需要@GeneratedValue註釋。

注:SpringBoot的@GeneratedValue 是不需要加引數的,但是如果資料庫控制主鍵自增(auto_increment), 不加引數就會報錯.

@GeneratedValue(strategy=GenerationType.IDENINY)

PS:@GeneratedValue註解的strategy屬性提供四種值: -AUTO主鍵由程式控制, 是預設選項 ,不設定就是這個 -IDENTITY 主鍵由資料庫生成, 採用資料庫自增長, Oracle不支援這種方式 -SEQUENCE 通過資料庫的序列產生主鍵,MYSQL不支援 -Table 提供特定的資料庫產生主鍵, 該方式更有利於資料庫的移植

這樣資料庫中就會建立對應表,表中的欄位與物件屬性欄位一一對映

JpaRepository 是繼承自 PagingAndSortingRepository 的針對 JPA 技術提供的介面,它在父介面的基礎上,提供了其他一些方法,比如 flush(),saveAndFlush(),deleteInBatch() 等。如果有這樣的需求,則可以繼承該介面。

只需要建立繼承JpaRepository介面的物件倉儲介面,就可以通過這個物件倉儲介面直接使用JpaRepository介面提供的方法。使我們幾乎不需要寫一條sql語句,大大簡化了操作。可在介面內新增查詢方法(方法名要規範,如下):findByProperty (type Property);

事務管理——@Transactional

表單校驗——@Valid

面向切面程式設計AOP

首先在pom檔案中引入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
複製程式碼

使用例:建立aspect包,在其下建立處理http請求的類,使用@Aspect和@Component註解,例:

 @Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")
 public void log() {
 }

 @Before("log()")
 public void doBefore(){
     //dosomethig
 }

 @After("log()")
 public void doAfter() {
     //dosomethig
 }
複製程式碼

使用logger列印資訊 在類中新增

private final static Logger logger = LoggerFactory.getLogger(ClassName.class);
複製程式碼

輸出語句為:logger.info(),例:

aop處理http請求由logger列印資訊

專案結構

girl專案結構

aspect-切面層,統一請求處理 controller-控制層,調研service實現業務 domain-領域模型層,放置對映資料庫表的簡單java物件和通用的返回結果物件 enums-放置錯誤資訊列舉類 exception-放置自定義exception類 handle-異常捕獲層,使用了@ControllerAdvice註解和@ExceptionHandler註解用於全域性異常的處理 properties-配置層,對應配置檔案中配置的屬性物件 repository-倉儲層,放置繼承JpaRepository介面的repository類 service-業務層,處理業務邏輯 utils-工具層,例如實現統一返回結果型別

參考:

慕課課程《Spring Boot進階之Web進階》+《2小時學習Spring Boot》

相關文章