专栏首页开发笔记SpringBoot集成JPA

SpringBoot集成JPA

在SpringBoot中,通过Spring Data JPA 和 Spring Data Rest可以快速构建出一个RESTFul应用。

关于Spring Data JPA:JPA是一种规范,而Spring Data JPA可以有效简化关系型数据库访问代码。

关于Spring Data:Spring Data是Spring的一个子项目,致力于简化数据库访问。

JPA规范:

JPA中有种定义,将Java对象【POJO】映射到数据库。

@Entity(name=“t_book”)

表明该类为一个实体类,它默认对应数据库中的表名是t_book,在项目启动时会根据该类自动生成一张表。

【如果不配置name,默认表名为类名】

@Id

表示该属性是一个主键,@GeneratedValue(strategy = GenerationType.IDENTITY)表示主键自动生成,strategy表示主键生成策略。

创建工程

  • 导入pom依赖 <?xml version="1.0" encoding="UTF-8"?> <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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.sang</groupId> <artifactId>jparestful</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>jparestful</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <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</artifactId> <version>1.1.9</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
  • 配置数据库连接 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.username=noneplus spring.datasource.password=Noneplus564925080! spring.datasource.url=jdbc:mysql://47.103.6.247:3306/restful-jpa?serverTimezone=UTC spring.jpa.hibernate.ddl-auto=update spring.jpa.database=mysql spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect spring.jpa.show-sql=true ##每页默认记录数,缺省值为20 #spring.data.rest.default-page-size=2 ##分页查询页码参数名,缺省值为page #spring.data.rest.page-param-name=page ##分页查询记录数参数名,缺省值为size #spring.data.rest.limit-param-name=size ##分页查询排序参数名,缺省值为sort #spring.data.rest.sort-param-name=sort ##base-path表示给所有请求路径都加上前缀 #spring.data.rest.base-path=/api ##添加成功时是否返回添加内容 #spring.data.rest.return-body-on-create=true ##更新成功时是否返回更新内容 #spring.data.rest.return-body-on-update=true
  • 创建实体类 @Entity(name = "t_book") public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; private String author; //省略getter/setter @Override public String toString() { return "Book{" + "id=" + id + ", name='" + name + '\'' + ", author='" + author + '\'' + '}'; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } }
  • 创建BookRepository public interface BookRepository extends JpaRepository<Book, Integer> { }
  • JpaRepository // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package org.springframework.data.jpa.repository; import java.util.List; import org.springframework.data.domain.Example; import org.springframework.data.domain.Sort; import org.springframework.data.repository.NoRepositoryBean; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.QueryByExampleExecutor; @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,输入http://localhost:8080/books

【默认请求路径都是实体类名小写加s】

按照id查询

自定义请求路径

/**
 * 默认请求路径都是实体类名加s
 *
 * 自定义请求类名:
 * @RepositoryRestResource (path = "bs",collectionResourceRel = "bs",itemResourceRel = "b")
 * path属性指用bs替代原先的books,collectionResourceRel表示将返回的json集合中的book集合改为bs,
 * itemResourceRel表示将单个book的key改为b
 */
@RepositoryRestResource(path = "bs",collectionResourceRel = "bs",itemResourceRel = "b")
public interface BookRepository extends JpaRepository<Book, Integer> {

访问:http://localhost:8080/bs

自定义查询方法

     /**@RestResource注解定义:默认请求路径就是方法名,path可自定义路径
     * http://localhost:8080/bs/search/author?author=余华
     * http://localhost:8080/bs/search/name?name=白夜行
     * @param author
     * @return
     */
    @RestResource(path = "author",rel = "author")
    List<Book> findByAuthorContains(@Param("author") String author);
    @RestResource(path = "name",rel = "name")
    Book findByNameEquals(@Param("name") String name);

代码参考

https://github.com/HCJ-shadow/SpringBootPlus

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 服务链路跟踪 && 服务监控

    微服务以微出名,在实际的开发过程中,涉及到成百上千个服务,网络请求引起服务之间的调用极其复杂。

    Noneplus
  • 服务注册组件——Eureka高可用集群搭建

    微服务的部署可能不会在同一台服务器上,而是需要通过远程调用,然后就涉及到IP地址了。理论上来说,直接通过IP地址直接通信也没有什么问题。 但是如果服务出问题,需...

    Noneplus
  • SpringBoot——HelloWorld

    根据演化原则,微服务是单体应用在业务发展到一定规模的演化策略。微服务的出现并不是替换单体,而是在单体应用无法满足业务需求的情况下破局的一种解决方案。

    Noneplus
  • 使用intellij idea搭建MAVEN+SSM(Spring+SpringMVC+MyBatis)框架

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-On...

    Java学习
  • Spring MVC知识梳理

    浏览器发送请求,请求到达SpringMVC处理,然后调用业务层逻辑实现,跟着持久层操作获取数据,最后逆序响应到浏览器。前面我们复习了Mybaits和Spring...

    Howl
  • Spring集成MyBatis

    如果觉得Hibernate不够灵活,可以尝试用Mybatis。相比于Hibernate,Mybatis则显得更加轻量、更加灵活,对于我这种不喜欢被束缚的人,使用...

    古时的风筝
  • 玩转SSH(四):Struts + Spring + MyBatis

    一、创建 SSMDemo 项目 点击菜单,选择“File -> New Project” 创建新项目。选择使用 archetype 中的 maven-webap...

    陈树义
  • 使用 idea 搭建 SSM 项目

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-On...

    一个优秀的废人
  • SpringBoot返回json和xml

    有些情况接口需要返回的是xml数据,在springboot中并不需要每次都转换一下数据格式,只需做一些微调整即可。 新建一个springboot项目,加入依赖j...

    dalaoyang
  • SpringBoot使用validator校验

    dalaoyang

扫码关注云+社区

领取腾讯云代金券