Spring data rest

spring-data-rest的詳細講解

一、基本配置和環境

1. 所用的環境:

  • idea
  • jdk 1.8
  • mysql 5.7
  • maven 3.3.9
  • postman

2. 創建springboot工程:(idea直接創建)

2.1. pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.huntcat</groupId>
    <artifactId>zzh-jpa-rest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>zzh-jpa-rest</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

! !!如果有數據庫相關的異常,請做如下處理:

  • 將數據庫依賴裏面的 runtime 改成 compile
  • 將springboot的版本降低

2.2. application.yml相關配置
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: 123456
    url: jdbc:mysql:///jpa?serverTimezone=UTC&useUnicode=true&useSSL=true
  jpa:
    hibernate:
      ddl-auto: update
    database: mysql
    show-sql: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL57Dialect
  data:
    rest:
      # 每頁默認記錄數,默認值爲 20
      default-page-size: 5
      # 分頁查詢頁碼參數名,默認值爲page
      page-param-name: page
      # 分頁查詢記錄數參數名,默認值爲size
      limit-param-name: size
      # 分頁查詢排序參數名,默認值爲sort
      sort-param-name: sort
      # 給所有請求路徑都加上前綴
      base-path: /api
      # 添加成功時是否返回添加內容
      return-body-on-create: true
      # 更新成功時是否返回添加內容
      return-body-on-update: true

3. 開始寫代碼了…

3.1. 項目的基本結構:

在這裏插入圖片描述
可以先按照我的項目結構先建好目錄

3.2. 創建兩個實體類:

User.java

package cn.huntcat.model;

import lombok.Data;

import javax.persistence.*;
import java.util.Set;

/**
* @Data:這是lombok插件
* 其他是jpa相關的知識
*
*/
@Data
@Entity
@Table(name = "zzh_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private Long userId;

    @Column(name = "last_name")
    private String lastName;

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "email")
    private String email;
	/**
	* 講講這個:
	* 	mappedBy:user是在 ManyToOne 裏面的屬性,這樣做的目的是將主鍵交由一方維護
	* 	cascade:可以進行級聯操作,自己可以點進去看源碼,這裏代表所有操作
	*/
    @OneToMany(mappedBy = "user",cascade = CascadeType.ALL)
    private Set<Address> addresses;
}

Address.java


import lombok.Data;

import javax.persistence.*;

/**
 *  Address.java
 */
@Data
@Entity
@Table(name = "zzh_address")
public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "addr_id")
    private Long addrId;

    @Column(name = "addr_name")
    private String addrName;
	/**
	*  @JoinColumn():加入外鍵的意思
	* 		name:生成表之後會產生的字段名
	* 		referencedColumnName :參考的字段爲 一 中的 主鍵
	*/
    @ManyToOne
    @JoinColumn(name = "user_addr_id", referencedColumnName = "user_id")
    private User user;
}
3.3. 創建兩個接口:

UserRepository.java

package cn.huntcat.repository;

import cn.huntcat.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RestResource;

import java.util.List;

/**
 * 繼承jpa也可以其他
 */
@RepositoryRestResource(path = "mayun", collectionResourceRel = "crr", itemResourceRel = "irr")
public interface UserRepository extends JpaRepository<User, Long> {

	/**
	* @RestResource:將自己定義的方法暴露出去
	* 	path:是需要訪問的路勁,不加默認就是方法名
	*/
    @RestResource(path = "findByLastName", rel = "lastName")
    List<User> findByLastName(@Param("lastName") String lastName);

}

AddressRepository.java

package cn.huntcat.repository;

import cn.huntcat.model.Address;
import cn.huntcat.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface AddressRepository extends JpaRepository<Address, Long> {

}

創建好這兩個接口後就有了其基本的方法了,可以去爽一把level 3 級別的restful
在這裏插入圖片描述
在這裏插入圖片描述

  • 這是通過 get 獲取到的信息,api是我自己設置的根路徑,配置文件裏面有
  • users:是默認的請求路勁(之後會說怎麼自定義)
  • 其他方式 就是該下請求方式
  • 比如 刪除某個用戶 :
    • DELETE:http://localhost:8080/api/users/1

3.4. 自定義路徑和投影的用法:

UserProjection.java

package cn.huntcat.model.projections;

import cn.huntcat.model.User;
import org.springframework.data.rest.core.config.Projection;

/**
 * @author wuchengxing
 * @version 1.0
 * @date 2019/11/29 20:23
 */

/**
 * User相關操作,進行投影 路徑爲 /base
 * 下面三個方法對應的就是可以獲取其信息
 * types: 是指你要獲取那個類的信息
 * base: 是你這個投影的名字
 */
@Projection(types = {User.class}, name = "base")
public interface UserProjection {

    String getFirstName();

    String getLastName();

    String getEmail();
}

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

4. 總結:

快樂…剛看官方文檔學的,見諒見諒

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章