SpringBoot 实战 (八) | 使用 Spring Data JPA 访问 Mysql 数据库
微信公众号:一个优秀的废人
如有问题或建议,请后台留言,我会尽力解决你的问题。
前言
如题,今天介绍 Spring Data JPA 的使用。
什么是 Spring Data JPA
在介绍 Spring Data JPA 之前,首先介绍 Hibernate 。 Hibernate 使用 O/R 映射 (Object-Relation Mapping) 技术实现数据访问, O/R 映射即将领域模型类与数据库的表进行映射,通过程序操作对象而实现表数据操作的能力,让数据访问操作无需关注数据库相关技术。
Hibernate 主导了 EJB 3.0 的 JPA 规范, JPA 即 Java Persistence API。JPA 是一个基于 O/R 映射的标准协议(目前最新版本是 JPA 2.1)。所谓规范即只定义标准规制(如注解、接口),不提供实现,软件提供商可以按照标准规范来实现,而使用者只需按照规范中定义的方式来使用,而不用和软件提供商的实现打交道。JPA 的主要实现由 Hibernate 、 EclipseLink 和 OpenJPA 等完成,我们只要使用 JPA 来开发,无论是哪一个开发方式都是一样的。
Spring Data JPA 是 Spring Data 的一个子项目,它通过基于 JPA 的 Repository 极大地减少了 JPA 作为数据访问方案的代码量。
简而言之,JPA 是一种 ORM 规范,但并未提供 ORM 实现,而 Hibernate 是一个 ORM 框架,它提供了 ORM 实现。
准备工作
- IDEA
- JDK1.8
- SpringBoot 2.1.3
pom.xml 文件引入的依赖如下:
<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.nasus</groupId><artifactId>jpa</artifactId><version>0.0.1-SNAPSHOT</version><name>jpa</name><description>jpa Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><!-- JPA 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- web 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mysql 连接类 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- lombok 依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></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>
简单说下,加入 JPA 依赖;mysql 连接类用于连接数据;web 启动类,但凡是 web 应用都需要依赖它;lombok 用于简化实体类。不会的看这篇旧文介绍:SpringBoot 实战 (三) | 使用 LomBok
application.yaml 配置文件
spring:
# 数据库相关datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=trueusername: rootpassword: 123456
# JPA 相关jpa:hibernate:ddl-auto: update #ddl-auto:设为 create 表示每次都重新建表show-sql: true
repository (dao) 层
package com.nasus.jpa.repository;import com.nasus.jpa.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;/*** Project Name:springboot_jpa_demo <br/>* Package Name:com.nasus.jpa.repository <br/>* Date:2019/2/19 21:37 <br/>* <b>Description:</b> TODO: 描述该类的作用 <br/>* @author <a href="turodog@foxmail.com">nasus</a><br/>*/
@Repository
public interface StudentRepository extends JpaRepository<Student,Integer>, CrudRepository<Student, Integer> {
}
从上图,可以看出 JpaRepository 继承于 PangingAndSortingRepository 继承于 CrudRepository 。
CrudRepository 提供基本的增删改查PagingAndSortingRepository 提供分页和排序方法;JpaRepository 提供 JPA 需要的方法。在使用的时候,可以根据具体需要选中继承哪个接口。
使用这些接口的好处有:
- 继承这些接口,可以使Spring找到自定义的数据库操作接口,并生成代理类,后续可以注入到Spring容器中;
- 可以不写相关的sql操作,由代理类生成
service 层
package com.nasus.jpa.service;import com.nasus.jpa.entity.Student;
import java.util.List;/*** Project Name:springboot_jpa_demo <br/>* Package Name:com.nasus.jpa.service <br/>* Date:2019/2/19 21:41 <br/>* <b>Description:</b> TODO: 描述该类的作用 <br/>* @author <a href="turodog@foxmail.com">nasus</a><br/>*/
public interface StudentService {Student save(Student student);Student findStudentById(Integer id);void delete(Integer id);void updateStudent(Student student);List<Student> findStudentList();
}
实现类:
package com.nasus.jpa.service.impl;import com.nasus.jpa.entity.Student;
import com.nasus.jpa.repository.StudentRepository;
import com.nasus.jpa.service.StudentService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** Project Name:springboot_jpa_demo <br/>* Package Name:com.nasus.jpa.service.impl <br/>* Date:2019/2/19 21:43 <br/>* <b>Description:</b> TODO: 描述该类的作用 <br/>* @author <a href="turodog@foxmail.com">nasus</a><br/>*/
@Service
public class StudentServiceImpl implements StudentService {@Autowiredprivate StudentRepository studentRepository;/*** 保存学生信息* @param student* @return*/@Overridepublic Student save(Student student) {return studentRepository.save(student);}/*** 根据 Id 查询学生信息* @param id* @return*/@Overridepublic Student findStudentById(Integer id) {return studentRepository.findById(id).get();}/*** 删除学生信息* @param id*/@Overridepublic void delete(Integer id) {Student student = this.findStudentById(id);studentRepository.delete(student);}/*** 更新学生信息* @param student*/@Overridepublic void updateStudent(Student student) {studentRepository.save(student);}/*** 查询学生信息列表* @return*/@Overridepublic List<Student> findStudentList() {return studentRepository.findAll();}
}
controller 层构建 restful API
package com.nasus.jpa.controller;import com.nasus.jpa.entity.Student;
import com.nasus.jpa.service.StudentService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** Project Name:springboot_jpa_demo <br/>* Package Name:com.nasus.jpa.controller <br/>* Date:2019/2/19 21:55 <br/>* <b>Description:</b> TODO: 描述该类的作用 <br/>* @author <a href="turodog@foxmail.com">nasus</a><br/>*/
@RestController
@RequestMapping("/student")
public class StudentController {@Autowiredprivate StudentService studentService;@PostMapping("/save")public Student saveStudent(@RequestBody Student student){return studentService.save(student);}@GetMapping("/{id}")public Student findStudentById(@PathVariable("id") Integer id){return studentService.findStudentById(id);}@GetMapping("/list")public List<Student> findStudentList(){return studentService.findStudentList();}@DeleteMapping("/{id}")public void deleteStudentById(@PathVariable("id") Integer id){studentService.delete(id);}@PutMapping("/update")public void updateStudent(@RequestBody Student student){studentService.updateStudent(student);}
}
测试结果
其他接口已通过 postman 测试,无问题。
源码下载:https://github.com/turoDog/De...
后语
以上为 SpringBoot 使用 Spring Data JPA 访问 Mysql 数据库的教程。最后,对 Python 、Java 感兴趣请长按二维码关注一波,我会努力带给你们价值,如果觉得本文对你哪怕有一丁点帮助,请帮忙点好看,让更多人知道。
另外,关注之后在发送 1024 可领取免费学习资料。资料内容详情请看这篇旧文:Python、C++、Java、Linux、Go、前端、算法资料分享
SpringBoot 实战 (八) | 使用 Spring Data JPA 访问 Mysql 数据库相关推荐
- springdata和mysql_Spring Boot使用Spring Data JPA访问MySQL数据库
它使用Spring Data JPA来访问数据库,但这只是众多可能选择中的一种(例如,您可以使用普通的Spring JDBC). mysql建立数据库,添加用户,并且授权 mysql> crea ...
- Spring Boot 2.x基础教程:使用Spring Data JPA访问MySQL
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | http://blog.di ...
- Spring Boot 2.x基础教程:使用Spring Data JPA访问MySQL我们得从哪入手
在数据访问这章的第一篇文章<Spring中使用JdbcTemplate访问数据库> 中,我们已经介绍了如何使用Spring Boot中最基本的jdbc模块来实现关系型数据库的数据读写操作. ...
- 从Spring Data JPA访问EntityManager
Spring Data JPA允许您通过使用Repository接口来快速开发数据访问层. 有时,您需要从Spring Data JPA访问EntityManager. 这篇文章向您展示了如何访问En ...
- Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8
## 一.Spring Data JPA 介绍 JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Sp ...
- Springboot学习1——通过JPA访问MySQL数据库
本文展示如何通过JPA访问MySQL数据库. JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据 ...
- jpa mysql_Spring boot通过JPA访问MySQL数据库
本文展示如何通过JPA访问MySQL数据库. JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据 ...
- Springboot 系列(十)使用 Spring data jpa 访问数据库
前言 Springboot data jpa 和 Spring jdbc 同属于 Spring开源组织,在 Spring jdbc 之后又开发了持久层框架,很明显 Spring data jpa 相对 ...
- SpringBoot学习笔记:Spring Data Jpa的使用
更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...
最新文章
- 笑出腹肌的注释,都是被代码耽误的诗人!
- 042_JDK的Map接口
- Jquery radio选中
- SignalR ——Android实践
- python条形堆积图_python – 使用DataFrame.plot显示堆积条形图中...
- python骨灰技巧_Pandas技巧,某骨灰级Pythoner经验总结,呕心沥血!
- 轻量级RTSP服务存在的意义
- web.xml中的contextConfigLocation在spring中的作用
- vml入门教程 【转】
- DataFactory插入MySQL中文乱码问题
- 花小钱办大事 888元血汗钱如何装电脑
- JQuery实战图片特效-遁地龙卷风
- C++学习:第三阶段(C++提高编程)————B站黑马程序员C++学习笔记
- pg数据库游标的使用
- 计算机网络基础中职期中,计算机网络基础 期中试卷
- CAD 系统变量参数大全
- markdown如何设置图片大小_Markdown 调整图片位置与大小
- Flutter集成与打包iOS应用
- upload上传, 取各类文件的名字
- KK 的99 条额外的建议[翻译]#yyds干货盘点#
热门文章
- 脑电分析系列[MNE-Python-9]| 参考电极应用
- BETA:由清华大学等多家研究机构联合提出的面向SSVEP-BCI应用程序的大型基准测试数据库...
- 国产GPU为何“一夜杀到老黄城下”?
- 放话挑战GPT-3!以色列推出参数多30亿、词条多5倍的新语言模型|公测不用排队...
- 英特尔二号人物被解雇:7nm全面落后,芯片还要外包代工
- 苹果认输!组装iPhone,富士康工人比机器好多了
- vue实现移动端圆形旋钮插件
- 使用Comet4j实现消息推送
- qs.parse()、qs.stringify()使用方法
- 解决linux中Kipmi0进程对CPU使用率很高问题