Spring Data JPA构建Restful服务应用Demo

简介: 昨天介绍了什么是Rest和Restful,没有看到的同学可以参考我的这篇文章:深入理解REST与RESTfulAPI那么说了这么多咱就实战一把,如何用SpringBoot来实现Rest,只需要Spring DataJPA和Spring Data Rest两个依赖包,快速开发一个restful应用。

Spring Data JPA构建Restful服务应用Demo

昨天介绍了什么是Rest和Restful,没有看到的同学可以参考我的这篇文章:深入理解REST与RESTfulAPI

那么说了这么多咱就实战一把,如何用SpringBoot来实现Rest,只需要Spring DataJPA和Spring Data Rest两个依赖包,快速开发一个restful应用。

创建项目

pom.xml

 <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>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

创建完成后就可以在数据库properties文件中进行数据库的配置,数据库的配置和之前文章中讲的配置是一样的,大家可以参考一下我的这篇文章。包括其中的实体这两篇文章也是相同的

解读SpringBoot整合持久层技术之搭建并整合Spring Data JPA项目实战

数据库

20200620164734140.jpg

创建BookRespository

这里和之前文章中讲到的整合JPA中的mapper类是相同的,这里可以什么内容都不写,只继承JpaRespository就可以实现对数据的增删改查操作,代码如下:

public interface BookDao extends JpaRepository<Book,Integer> {}

有人会说了,这样就可以了吗?给你看一下jpaRepository的源码,我也是第一次看哈

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();
    List<T> findAll(Sort var1);
    List<T> findAllById(Iterable<ID> var1);
    <S extends T> List<S> saveAll(Iterable<S> var1);
    void flush();
    <S extends T> S saveAndFlush(S var1);
    void deleteInBatch(Iterable<T> var1);
    void deleteAllInBatch();
    T getOne(ID var1);
    <S extends T> List<S> findAll(Example<S> var1);
    <S extends T> List<S> findAll(Example<S> var1, Sort var2);
}

经过上面几步我们就可以运行测试了,这里我们选择postMan来进行测试,这样看起来比较直观。


测试

RESTful服务创建成功之后,默认的请求路径是实体类名小写再加上后缀。

在测试的时候一定要以json的格式进行数据的交互,post默认的request请求形式是以test的形式,所以我们要改成application/json的形式,否则就会报错:


org.springframework.http.converter.HttpMessageNotReadableException异常

20200620165744690.jpg

改完之后就可以在body处进行json数据形式的编写

2020062017065188.jpg

返回的结果如下:

{
  "name": "SpringBoot开发实战",
  "author": "我",
  "price": 20.0,
  "description": "good",
  "_links": {
    "self": {
      "href": "http://localhost:8080/books/36"
    },
    "book": {
      "href": "http://localhost:8080/books/36"
    }
  }
}

表示成功增加一条数据信息,然后我们测试一下查询,查询就是把提交形式改成GET。

{
  "_embedded": {
    "books": [
      {
        "name": "呐喊",
        "author": "鲁迅",
        "price": 23.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/1"
          },
          "book": {
            "href": "http://localhost:8080/books/1"
          }
        }
      },
      {
        "name": "朝花夕拾",
        "author": "鲁迅1",
        "price": 24.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/2"
          },
          "book": {
            "href": "http://localhost:8080/books/2"
          }
        }
      },
      {
        "name": "简单生活学",
        "author": "鲁迅2",
        "price": 30.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/3"
          },
          "book": {
            "href": "http://localhost:8080/books/3"
          }
        }
      },
      {
        "name": "XML基础与案例教程",
        "author": "鲁迅3",
        "price": 31.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/4"
          },
          "book": {
            "href": "http://localhost:8080/books/4"
          }
        }
      },
      {
        "name": "物联网之源",
        "author": "鲁迅4",
        "price": 44.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/5"
          },
          "book": {
            "href": "http://localhost:8080/books/5"
          }
        }
      },
      {
        "name": "狂人日记",
        "author": "鲁迅",
        "price": 23.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/27"
          },
          "book": {
            "href": "http://localhost:8080/books/27"
          }
        }
      },
      {
        "name": "其他书籍",
        "author": "张闲闲",
        "price": null,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/29"
          },
          "book": {
            "href": "http://localhost:8080/books/29"
          }
        }
      },
      {
        "name": "java开发程序设计",
        "author": "张闲闲",
        "price": 80.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/32"
          },
          "book": {
            "href": "http://localhost:8080/books/32"
          }
        }
      },
      {
        "name": "狂人日记",
        "author": "鲁迅",
        "price": 23.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/33"
          },
          "book": {
            "href": "http://localhost:8080/books/33"
          }
        }
      },
      {
        "name": "SpringBoot开发实战",
        "author": "我",
        "price": 20.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/36"
          },
          "book": {
            "href": "http://localhost:8080/books/36"
          }
        }
      }
    ]
  },
  "_links": {
    "self": {
      "href": "http://localhost:8080/books"
    },
    "profile": {
      "href": "http://localhost:8080/profile/books"
    },
    "search": {
      "href": "http://localhost:8080/books/search"
    }
  },
  "page": {
    "size": 20,
    "totalElements": 10,
    "totalPages": 1,
    "number": 0
  }
}

会为我们自动返回一个paga信息,如果按照id来查询,在请求路径后面加上id就可以。如果是修改的话就把请求改成PUT形式,修改单条的话就在路径后面加上id,删除的话就是DELETE请求,搭建起来试试把,这里我就不再进行测试了。

相关文章
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
10042 60
|
4月前
|
Java API 数据库
JPA简介:Spring Boot环境下的实践指南
上述内容仅是JPA在Spring Boot环境下使用的冰山一角,实际的实践中你会发现更深更广的应用。总而言之,只要掌握了JPA的规则,你就可以借助Spring Boot无比丰富的功能,娴熟地驾驶这台高性能的跑车,在属于你的程序世界里驰骋。
168 15
|
3月前
|
Prometheus 监控 Cloud Native
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务实现步骤
|
7月前
|
人工智能 自然语言处理 Java
对话即服务:Spring Boot整合MCP让你的CRUD系统秒变AI助手
本文介绍了如何通过Model Context Protocol (MCP) 协议将传统Spring Boot服务改造为支持AI交互的智能系统。MCP作为“万能适配器”,让AI以统一方式与多种服务和数据源交互,降低开发复杂度。文章以图书管理服务为例,详细说明了引入依赖、配置MCP服务器、改造服务方法(注解方式或函数Bean方式)及接口测试的全流程。最终实现用户通过自然语言查询数据库的功能,展示了MCP在简化AI集成、提升系统易用性方面的价值。未来,“对话即服务”有望成为主流开发范式。
5348 7
|
6月前
|
SQL Java 编译器
深入理解 Spring Data JPA 的导入与使用:以 UserRepository为例
本文深入解析了 Spring Data JPA 中 `UserRepository` 的导入与使用。通过示例代码,详细说明了为何需要导入 `User` 实体类、`JpaRepository` 接口及 `@Repository` 注解。这些导入语句分别用于定义操作实体、提供数据库交互方法和标识数据访问组件。文章还探讨了未导入时的编译问题,并展示了实际应用场景,如用户保存、查询与删除操作。合理使用导入语句,可让代码更简洁高效,充分发挥 Spring Data JPA 的优势。
378 0
|
Java 应用服务中间件 数据格式
第一个Spring restful 项目-从开发到部署
环境 开发环境 Windows7旗舰版 eclipse 版本 Eclipse Java EE IDE for Web Developers.
1203 0
|
3月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
771 0
|
6天前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
82 3
|
6天前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
223 2