1.JPA概述

JPA:Java持久化规范。JPA(Java Persistence API)是Sun官方提出的Java持久化规范。为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现是为了简化现有的持久化开发工作和整合ORM技术。结束各个ORM框架各自为营的局面。

2.Spring Data JPA

Spring Data JPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架,是基于Hibernate之上构建的JPA使用解决方案,用极简的代码实现了对数据库的访问和操作,包括了增、删、改、查等在内的常用功能。

3.pom.xml

        <!--测试@Test--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--导入SpringBoot的web相关依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--导入jpa编程相关的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!--数据库连接依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.25</version></dependency><!--druid数据库连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency><!--导入lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.6</version></dependency>

4.application.yml

spring:datasource:url: jdbc:mysql://localhost:3306/springboot-001?serverTimezone=GMT%2B8&&characterEncoding=UTF-8type: com.alibaba.druid.pool.DruidDataSourceusername: rootpassword: 113846driver-class-name: com.mysql.jdbc.Driver    #5.x版本mysqljpa:hibernate:ddl-auto: updateshow-sql: true

ddl-auto: 四种规范,分别为

1.create:每次运行项目时候都会根据实体类生成对应的表,缺点造成数据丢失。

2.update:每次运行时先检查数据库有无表,有则运行无则生成

3.create:每次生成新表,但是sessionFactory每次关闭对应表也删除

4.validate:验证数据库表的结构

show-sql:显示sql语句,在控制台打印出来

5.bean

@Entity
@Data  //get  set
@AllArgsConstructor  //生成带有所有参数的构造方法
@NoArgsConstructor  //无参数构造方法
public class Person {@Id//自动生成主键@GeneratedValueprivate Long id;//nullable,将来创建表的字段值是否为空,length:长度20@Column(name = "name", nullable = true, length = 20)private String name;@Column(name = "age", nullable = true, length = 4)private int age;
}

@Entity:Entity注解作为实体类的证明,通常与Lombok中的@Data注解连用,降低开发中底层重复代码的编程量。

6.mapper

//Person:实体类类名  Long:主键类型
public interface PersonRepository extends JpaRepository<Person, Long> {//查询指定名字的人public Person findByNameIs(String name);//查询指定人的名字和年龄的人public Person findByNameIsAndAgeIs(String name, int age);//查询名字包含指定名字的人public Person findByNameContaining(String name);//JPQL语句中的Person不是表名,是实体类的类名@Query("select p from Person p where p.name=:name")  //JPQL语句,对象查询,完全支持面向对象public Person getPerson1(@Param("name") String name);@Query("select p from Person p where p.name=?1 and p.age=?2")public Person getByNameIsAndAgeIs1(@Param("name") String name, @Param("age") int age);@Query("select p from Person p where p.name like %:name%")public Person getNameslike(@Param("name") String name);//nativeQuery:表明这条语句是sql语句,而不是jpql语句@Query(value = "select * from person where length(name)=6 ", nativeQuery = true)  //SQL语句public List<Person> getAllPersonByNameLengthSix();
}

7.controller

7.1请求参数和请求体

@RestController
@RequestMapping(value = "/person")
public class PersonController {@AutowiredPersonRepository personRepository;@PostMapping(path = "addPerson")public void addPerson(@RequestBody Person person) {//保存新的用户personRepository.save(person);}@GetMapping(path = "getAllPerson")public List<Person> getPerson() {return personRepository.findAll();}@DeleteMapping("deletePerson")public void deletePerson(@RequestParam Long id) {personRepository.deleteById(id);}@PutMapping(path = "updatePerson")public void updatePerson(@RequestBody Person person) {personRepository.saveAndFlush(person);}
}

路径解析:

http://localhost:8080/person/addPerson    :json格式传参

http://localhost:8080/person/getAllPerson

http://localhost:8080/person/deletePerson

http://localhost:8080/person/updatePerson

7.2路径参数

@RestController
@RequestMapping("/person2")
public class Person2Controller {@AutowiredPersonRepository personRepository;@GetMapping("findByNameIs/{name}")public Person findByNameIs(@PathVariable String name) {return personRepository.findByNameIs(name);}@GetMapping("findByNameIsAndAgeIs/{name}/{age}")public Person findByNameIsAndAgeIs(@PathVariable String name, @PathVariable int age) {return personRepository.findByNameIsAndAgeIs(name, age);}@GetMapping("findByNameContaining/{name}")public Person findByNameContaining(@PathVariable String name) {return personRepository.findByNameContaining(name);}
}

路径解析:

http://localhost:8080/person2/findByNameIs/张思思

http://localhost:8080/person2/findByNameIsAndAgeIs/李思思/20

http://localhost:8080/person2/findByNameContaining/李思思

7.3非注解参数

@RestController
@RequestMapping("/person3")
public class Person3Controller {@AutowiredPersonRepository personRepository;@GetMapping("getPerson1/{name}")public Person getPerson1(@PathVariable String name) {return personRepository.getPerson1(name);}//http://127.0.0.1/8080/person3/getByNameIsAndAgeIs1?name=值&&age=值@GetMapping("getByNameIsAndAgeIs1")public Person getByNameIsAndAgeIs1(String name, int age) {return personRepository.getByNameIsAndAgeIs1(name, age);}@GetMapping("getNameslike")public Person getNameslike(String name) {return personRepository.getNameslike(name);}@GetMapping("getAllPersonByNameLengthSix")public List<Person> getAllPersonByNameLengthSix() {return personRepository.getAllPersonByNameLengthSix();}
}

路径解析:

http://localhost:8080/person3/getByNameIsAndAgeIs1?name=李思思&age=20

http://localhost:8080/person3/getNameslike?name=李四 :精确查询

http://localhost:8080/person3/getAllPersonByNameLengthSix  :获取长度为6的对象集

8.扩展构建restful风格的JPA

8.1pom.xml

在本项目中加入resr依赖包

        <!-- 通过spring-data-rest-webmvc,支持通过REST暴露Spring Data数据仓库  --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-rest</artifactId></dependency>

8.2mapper

//@RepositoryRestResource(path = "mypersons",exported = false)
//指定访问路径
@RepositoryRestResource(path = "mypersons")
public interface PersonDao2 extends JpaRepository<Person, Long> {//exported:禁止使用该路径访问,false直接该方法局访问不了了,也就是模糊查询不存在了@RestResource(path = "findbynames", exported = false)public List<Person> findByNameContains(@Param("name") String name);//模糊查询//RestResource 指定访问路径@RestResource(path = "findbyname")public Person findByNameEquals(@Param("name") String name);        //精准查询
}

8.3路径访问,接口测试结果展示

路径:

http://localhost:8080/mypersons   :全部查询

结果展示:

路径解析:

查询所有的人:
http://localhost:8080/mypersons
get请求

查询指定的页码,指定每页显示记录数:
http://localhost:8080/mypersons?page=0&size=10

按照指定属性排序:按照id降序输出,第一页,显示10条
http://localhost:8080/mypersons?page=0&size=10&sort=id,desc

按照指定的id查询(GET):  按照id为5查询person对象
http://localhost:8080/mypersons/5

修改指定的人(PUT):    按照id为5可以json格式修改姓名和年龄
http://localhost:8080/mypersons/5

删除指定的人(DELETE):
http://localhost:8080/mypersons/5

自定义请求路径:
@RepositoryRestResource(path = "mypersons")
http://localhost:8080/mypersons/8

自定义访问方法:@RestResource注解
@RestResource(path = "findbynames")
@RestResource(path = "findbyname")

http://localhost:8080/mypersons/search/findbynames?name=敏      模糊查询,上边禁用了哦
http://localhost:8080/mypersons/search/findbyname?name=张敏    精准查询

SpringBoot——JPA的使用、构建restful风格的JPA相关推荐

  1. springboot构建RESTful 风格应用

    Spring Boot 构建 RESTful 风格应用 1.Web开发的两种模式: 前后端不分离: 以前没有移动互联网时,我们做的大部分应用都是前后端不分的,比如jsp,或者thymeleaf等后端分 ...

  2. 企业级SpringBoot教程(十一)springboot集成swagger2,构建Restful API

    swagger,中文"拽"的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风 ...

  3. restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用

    松哥原创的四套视频教程已经全部杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程 RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念 ...

  4. java restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用!

    点击上方"Java后端技术",选择"置顶或者星标" 你关注的就是我关心的! 作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 推荐阅读:10个 ...

  5. springmvc+swagger构建Restful风格文档

    本次和大家分享的是java方面的springmvc来构建的webapi接口+swagger文档:上篇文章分享.net的webapi用swagger来构建文档,因为有朋友问了为啥.net有docpage ...

  6. 构建RESTful风格的WCF服务

    RESTful Wcf是一种基于Http协议的服务架构风格. 相较 WCF.WebService 使用 SOAP.WSDL.WS-* 而言,几乎所有的语言和网络平台都支持 HTTP 请求. RESTf ...

  7. 使用Swashbuckle构建RESTful风格文档

    本次和大家分享的是Swagger to WebApi的nuget包Swashbuckle:因为项目需要统一api文档的风格,并要支持多种开发语言(C#,java,python),所以首先想到的是swa ...

  8. Spring Boot文档阅读笔记-构建Restful风格的WebService

    Maven代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  9. Spring Boot文档阅读笔记-构建Restful风格的WebService客户端

    对应的maven如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

最新文章

  1. select,epoll,poll比较
  2. 1.8 其他正则化方法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  3. C# 操作XML入门
  4. KindEditor上传的图片显示在jsp页面上时调整布局
  5. MacOS 好用的插件和图形界面程序
  6. java xml特殊字符转义_Java中将xml文件转化为json遇到特殊字符会报错!
  7. 管家婆仓库管理软件到底选哪个好?
  8. AMD GPU 系列版本信息
  9. linux系统下的打印机驱动下载,用于UNIXLinux系统的打印机驱动程序-Lexmark.PDF
  10. 51单片机:74LS138译码实验
  11. # 杂谈偶感 × 基于QFD方法的质量屋构建
  12. Linux命令行参数前加杠-和不加杠的区别
  13. 推荐一组用过好几年的非常稳定的dns
  14. 深度学习基础(五):循环神经网络概念、结构及原理实现
  15. 华为 嵌入式软件工程师面试题
  16. (二)弹性布局Flex
  17. python xlwt
  18. sturts调用支付宝接口。
  19. 【读书笔记】抓取深圳或上海股市,或香港美国等有关股市某时间段内全部股票行情数据,进行主成分分析构造你个人的股市指数
  20. 【Java】Java中空字符的写法

热门文章

  1. otg android 键盘,使用USB OTG将手机、平板连上键盘、U盘
  2. IOC容器中bean的生命周期,iocbean生命周期
  3. 文科计算机课程,高校文科生要学专业计算机课程
  4. setFocus不能生效的问题
  5. Linux中vi编辑器的使用
  6. Qt编写可视化大屏电子看板系统1-布局方案
  7. uboot 看门狗喂狗
  8. aria2搭建(CentOS 7)
  9. react使用antd-mobile做自定义替换头像功能
  10. OpenDigg iOS开源项目月报201704