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. 总结:

快乐…刚看官方文档学的,见谅见谅

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