SpringData - JPA
生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德分享学习心得,欢迎指正,大家一起学习成长!
文章插图
JPA简介JPA 即Java Persistence API 。是一款持久层框架,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 。JPA的对象关系映射(ORM)模型是基于Hibernate 。是一款面向对象的ORM框架,JPA不需要关心数据库字段,通过注解将数据库表与实体完成映射,在java中的操作只需要对实体进行操作即可 。
什么是ORM?ORM(Object-Relational Mapping) 表示对象关系映射 。在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中 。只要有一套程序能够做到建立对象与数据库的关联,操作对象就可以直接操作数据库数据,就可以说这套程序实现了ORM对象关系映射 。也就是说ORM是建立了一个实体与数据库表的关系,使得开发者对实体的直接操作而不是对数据库的操作,但操作实体也就等同于操作了数据库 。ORM框架还有:MyBatis、Hibernate
SpringData-JPASpring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作 。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现在实际的工作工程中,推荐使用Spring Data JPA + ORM(如:hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便,同时也使数据库层操作更加简单,方便解耦 。
SpringBoot整合JPA接下来通过一个案例简单学习一下JPA,并且在案例中学习一些相关知识 。
导入依赖需要导入jpa坐标和mysql依赖包
<dependencies><!--jpa--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!--Mysql依赖包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency></dependencies>
编写配置文件先配置数据源 , 采用mysql8.0 。还包括配置jpa的相关配置 。主要是配置jpa的sql日志打印和自动创建表格 。spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springboot_demo?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername: rootpassword: 12356jpa:show-sql: truehibernate:ddl-auto: create # 自动创建表格,之后改成update
jpa的底层是通过hibernate执行的 , 通过配置ddl-auto能够自动创建表,但是这个不建议使用 , 如果是create , 在项目运行的时候就会把存在的表删除在添加 。详情如下:ddl-auto属性用于设置自动表定义,可以实现自动在数据库中为我们创建一个表,表的结构会根据我们定义的实体类决定,它有4种- create 启动时删数据库中的表 , 然后创建,退出时不删除数据表
- create-drop 启动时删数据库中的表 , 然后创建,退出时删除数据表 如果表不存在报错
- update 如果启动时表格式不一致则更新表,原有数据保留
- validate 项目启动表结构进行校验 如果不一致则报错
创建实体类【【持久层框架】- SpringData - JPA】可见通过注解可以实现实体与数据库的直接映射,jpa操作的就是这些实体就等同操作数据库的表结构 。
package com.jpa.demo.domain;import lombok.Data;import javax.annotation.Generated;import javax.persistence.*;import java.io.Serializable;/** * @author: lyd * @description: 实体User * @Date: 2022/10/2 */@Data@Entity@Table(name = "sys_user")public class User implements Serializable {@Id@Column(name = "user_id")@GeneratedValue(strategy = GenerationType.IDENTITY) // 自增private Long id;private String username;private String nickName;private String password;}
- @Data:lombok下的注解,主要是方便开发 , 减少对get、set、tostring的编写 。这个需要导入相应的依赖坐标 。
- @Entity:声明是一个实体 。
推荐阅读
- 风色幻想:命运传说新手英雄怎么培养
- Tubian0.42
- 支付宝蚂蚁庄园11月6日答案分享
- 电子指南针怎么看方向(如何利用手机指南针判别方向)
- 【LeetCode第 313 场周赛】忘光光
- 一加手机怎么样,可以入手吗(一加ace值得入手吗)
- 为什么中国的To B企业都活的很“惨”?
- 怎么玩跳棋(二人跳棋的下法图解)
- 生产管理ERP哪一款比较好?
- 制造业数字化转型,本土云ERP系统如何卡位?