SpringBoot——JPA的使用、构建restful风格的JPA
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相关推荐
- springboot构建RESTful 风格应用
Spring Boot 构建 RESTful 风格应用 1.Web开发的两种模式: 前后端不分离: 以前没有移动互联网时,我们做的大部分应用都是前后端不分的,比如jsp,或者thymeleaf等后端分 ...
- 企业级SpringBoot教程(十一)springboot集成swagger2,构建Restful API
swagger,中文"拽"的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风 ...
- restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用
松哥原创的四套视频教程已经全部杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程 RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念 ...
- java restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用!
点击上方"Java后端技术",选择"置顶或者星标" 你关注的就是我关心的! 作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 推荐阅读:10个 ...
- springmvc+swagger构建Restful风格文档
本次和大家分享的是java方面的springmvc来构建的webapi接口+swagger文档:上篇文章分享.net的webapi用swagger来构建文档,因为有朋友问了为啥.net有docpage ...
- 构建RESTful风格的WCF服务
RESTful Wcf是一种基于Http协议的服务架构风格. 相较 WCF.WebService 使用 SOAP.WSDL.WS-* 而言,几乎所有的语言和网络平台都支持 HTTP 请求. RESTf ...
- 使用Swashbuckle构建RESTful风格文档
本次和大家分享的是Swagger to WebApi的nuget包Swashbuckle:因为项目需要统一api文档的风格,并要支持多种开发语言(C#,java,python),所以首先想到的是swa ...
- Spring Boot文档阅读笔记-构建Restful风格的WebService
Maven代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- Spring Boot文档阅读笔记-构建Restful风格的WebService客户端
对应的maven如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
最新文章
- select,epoll,poll比较
- 1.8 其他正则化方法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
- C# 操作XML入门
- KindEditor上传的图片显示在jsp页面上时调整布局
- MacOS 好用的插件和图形界面程序
- java xml特殊字符转义_Java中将xml文件转化为json遇到特殊字符会报错!
- 管家婆仓库管理软件到底选哪个好?
- AMD GPU 系列版本信息
- linux系统下的打印机驱动下载,用于UNIXLinux系统的打印机驱动程序-Lexmark.PDF
- 51单片机:74LS138译码实验
- # 杂谈偶感 × 基于QFD方法的质量屋构建
- Linux命令行参数前加杠-和不加杠的区别
- 推荐一组用过好几年的非常稳定的dns
- 深度学习基础(五):循环神经网络概念、结构及原理实现
- 华为 嵌入式软件工程师面试题
- (二)弹性布局Flex
- python xlwt
- sturts调用支付宝接口。
- 【读书笔记】抓取深圳或上海股市,或香港美国等有关股市某时间段内全部股票行情数据,进行主成分分析构造你个人的股市指数
- 【Java】Java中空字符的写法