本篇内容介绍了“怎么用Spring Initializr创建Springboot项目”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Springboot
和 Spring MVC
简化了web
应用中的RESTful
开发,然而还有一种更简单的,那就是Spring Data REST
。Spring Data REST
建立在Data Repository
之上,它可以直接把resository
以HATEOAS
风格暴露成Web
服务,就不需要再手写Controller
层。
HATEOAS
,即Hypermedia as the Engine of Application State
,它是一种更成熟的REST
模型,在资源的表达中包含了链接信息,客户端可以根据链接来发现可执行的动作。
Spring Data REST
支持Spring Data JPA
、Spring Data MongoDB
、Spring Data Neo4j
、Spring Data GenFire
、Spring Data Cassandra
,这里选择大家比较熟悉的JPA
。
我们用例子来感受一下吧。
我们通过Spring Initializr
来快速创建Springboot
项目。选中的依赖组件如下:
(1)Spring Web:提供Web服务;
(2)Rest Repositories:提供Spring Data REST
的支持;
(3)Spring Data JPA:通过JPA
提供Repository
方式的数据访问;
(4)H2 Database:H2数据库,为了方便简洁,使用该数据库。
(推荐课程:Spring教程)
导入后对应的pom.xml
中依赖如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <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.h3database</groupId> <artifactId>h3</artifactId> <scope>runtime</scope> </dependency>
创建一个实体类User,如下所示:
package com.pkslow.rest.entity;
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String name; private Integer age; private String email; //getter & setter }
定义Repository
接口用于操作数据库,如下所示:
package com.pkslow.rest.repo;
import com.pkslow.rest.entity.User; import org.springframework.data.repository.CrudRepository; import org.springframework.data.rest.core.annotation.RepositoryRestResource; @RepositoryRestResource(path = "user") public interface UserRepository extends CrudRepository<User, Integer> { }
注解RepositoryRestResource
是Data REST
用于暴露Repository
,path
为访问路径,设置为user
,则访问地址为http://localhost:8080/user
。
准备好以上代码,直接启动Springboot
应用即可,我们把端口设置为8080
可以快速实现分页及排序功能,只需要把Repository
的父接口改为PagingAndSortingRepository
即可,如下所示:
@RepositoryRestResource(path = "user") public interface UserRepository extends PagingAndSortingRepository<User, Integer> { }
其实就是多了两个方法findAll(Sort var1)
和findAll(Pageable var1)
,如下所示:
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> { Iterable<T> findAll(Sort var1);
Page<T> findAll(Pageable var1); }
查询http://localhost:8080/user?page=1&size=2&sort=id,desc,表示查询第二页,每页2条记录,以ID倒序展示。如下:
{ "_embedded": { "users": [ { "name": "pkslow.com", "age": 18, "email": "pkslow@pkslow.com", "_links": { "self": { "href": "http://localhost:8080/user/33" }, "user": { "href": "http://localhost:8080/user/33" } } }, { "name": "pkslow.com", "age": 18, "email": "pkslow@pkslow.com", "_links": { "self": { "href": "http://localhost:8080/user/32" }, "user": { "href": "http://localhost:8080/user/32" } } } ] }, "_links": { "first": { "href": "http://localhost:8080/user?page=0&size=2&sort=id,desc" }, "prev": { "href": "http://localhost:8080/user?page=0&size=2&sort=id,desc" }, "self": { "href": "http://localhost:8080/user?page=1&size=2&sort=id,desc" }, "next": { "href": "http://localhost:8080/user?page=2&size=2&sort=id,desc" }, "last": { "href": "http://localhost:8080/user?page=17&size=2&sort=id,desc" }, "profile": { "href": "http://localhost:8080/profile/user" } }, "page": { "size": 2, "totalElements": 35, "totalPages": 18, "number": 1 } }
可以发现page
是从0开始的,1表示第二页;返回结果还提供了第一页、上一页、本页、下一页、最后一页的链接;以及分页信息。
(推荐微课:Spring微课)
REST
提供了8个基于Repository
的事件,如下:
BeforeCreateEvent
AfterCreateEvent
BeforeSaveEvent
AfterSaveEvent
BeforeLinkSaveEvent
AfterLinkSaveEvent
BeforeDeleteEvent
AfterDeleteEvent
添加一个自定义事件如下:
package com.pkslow.rest.event;
import com.pkslow.rest.entity.User; import org.springframework.data.rest.core.event.AbstractRepositoryEventListener; import org.springframework.stereotype.Component; @Component public class PkslowEventListener extends AbstractRepositoryEventListener<User> { @Override public void onBeforeCreate(User entity) { System.out.println("pkslow creating:" + entity); } @Override public void onBeforeSave(User entity) { System.out.println("pkslow saving:" + entity); } @Override public void onAfterDelete(User entity) { System.out.println("pkslow deleted:" + entity); } }
分别执行了增加、修改、删除后,日志如下:
pkslow creating:User{id=null, name='pkslow.com', age=18, email='pkslow@pkslow.com'} pkslow saving:User{id=32, name='pkslow.com', age=20, email='pkslow@pkslow.com'} pkslow deleted:User{id=14, name='pkslow.com', age=18, email='pkslow@pkslow.com'}
说明事件成功执行,结合这个功能,可以实现很多业务逻辑,如删除后记录操作日志,并删除其它相关数据。
(推荐教程:Spring Boot 那些事)
默认基础路径是/
,可以通过spring.data.rest.base-path=api
进行配置,这样就变成了localhost:8080/api/user
。
HAL Browser
是一个专门用于浏览基于JSON Hypertext Application Language
的前端工具。我们前面已经提供了HATEOAS
风格的RESTful
服务,HAL Browser
可以方便查看。
加入依赖:
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-rest-hal-browser</artifactId> <version>3.3.2.RELEASE</version> </dependency>
启动后访问http://localhost:8080/browser/index.html#/
“怎么用Spring Initializr创建Springboot项目”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。