SpringBoot整合JPA并简单使用示例

news/2024/11/8 17:03:30/

干了这碗毒鸡汤~


相关知识说明

       JPA(Java Persistence API):JPA用于描述对象——关系表的映射关系,并将运行期的实体对象持久化到数据库中。同时也提供有多达十八种增删改查操作数据库表的方法。JPA既可以JPA可以进行单表的增删改查操作,也可以通过@OneToOne、@ManyToMany、@ManyToOne、@OneToMany注解实现联表(多表)的查询。


软硬件环境说明Windows10、IntelliJ IDEA、SpringBoot 2.1.4.RELEASE。

SpringBoot整合JPA

第一步:在pom.xml中引入相关依赖

说明:本人使用的是MySQL,数据库连接池用的是druid。除了引入上述依赖外,本人还引入了快速开
           发lombok依赖,SpringBoot的基本test依赖。

给出完整版的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.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.aspire</groupId><artifactId>jpa-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>jpa-demo</name><description>SpringBoot整合JPA并简单使用示例</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><!-- MySQL --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.18</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.4</version></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(Java Persistence API)配置
# 将spring.jpa.hibernate.ddl-auto设置为none,由此告知Hibernate不要创建数据表
# DDL模式(none、validate、update、create和create-drop)。
# 这是hibernate. hbm2ddl.auto属性的一个快捷方式。在使用嵌入式数据库时默认为create-drop,其他情况下默认为none
spring.jpa.hibernate.ddl-auto = none
#在使用Bitronix Transaction Manager时打开SQL语句日志。(默认false)
spring.jpa.show-sql = true
#开启JPA(默认true)
spring.data.jpa.repositories.enabled = true
# 要操作的目标数据库类型,默认自动检测。
# DEFAULT,DB2,DERBY,H2,HANA,HSQL,INFORMIX,MYSQL,ORACLE,POSTGRESQL,SQL_SERVER,SYBASE;
spring.jpa.database = MYSQL
# 要操作的目标数据库,默认自动检测。也可以通过spring.jpa.database枚举指定。
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
#启动时要初始化Schema(默认false)
spring.jpa.generate-ddl = false
# 注册OpenEntityManagerInViewInterceptor,在请求的整个处理过程中,
# 将一个JPAEntityManager绑定到线程上(默认true)
spring.jpa.open-in-view  = true
# JPA提供方要设置的额外原生属性
#spring.jpa.properties# --------------------------------------------------------------MYSQL配置
# 高版本的MySQL需要指定时区serverTimezone=GMT%2B8
spring.datasource.url = jdbc:mysql://localhost:3306/demo?characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.username = root
spring.datasource.password = dengshuai
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
# 高版本的SpringBoot需要加上hikari
spring.datasource.hikari.driver-class-name = com.mysql.jdbc.Driver

第三步:根据表的结构,编写对应的JPA实体类

本人的表是这样的:

对应的JPA实体类时这样的:

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import javax.persistence.*;
import java.io.Serializable;/*** 员工实体类模型*** 这里 @Data、@Builder、@NoArgsConstructor、@AllArgsConstructor  是: lombok的注解,与JPA无* 关, 引入lombok主要是为了快速开发* 注: 若使用了@Builder注解、建议一定要使用 @NoArgsConstructor、@AllArgsConstructor注解,因*     为@Builder注解是建造者模式,如果只使用了@Builder,而不使用@NoArgsConstructor*     、@AllArgsConstructor注解的话,可能他会导致fastjson、jpa等出现异常** 这里 @Entity  的作用是: 表明这是一个JPA实体* 这里 @Table  的作用是:  指明这个JPA实体 对应 那一张表** @author JustryDeng* @date 2019/4/22 20:41*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "employee")
public class EmployeePO implements Serializable {/*** 这里 @Id 注解的作用是: 指明此字段对应的列是相关表的主键* 这里 @GeneratedValue 注解的作用是: 指定主键生成策略, 默认是AUTO的策略,也就是主键序列化,*     由于mysql是不支持序列化的, 所以我们需要给他指定其他的策略,这里*     GenerationType.IDENTITY表示 使用此数据库服务器端自己的策略*/@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;/*** 姓名** 这里@Column注解的作用是: 1、指明该字段对应表中的哪一列*                       2、指明此字段可以为null(默认即为true)* 注:@Column注解还有很多属性,如: 约束是否唯一、是否插入、是否更新、指定长度等等,*    可详见源码 或 查阅相关资料文档*/@Column(name = "name", nullable = true)private String name;/** 年龄 */private Integer age;/*** 性别** 这里@Column注解的length属性作用是: 指明该字段最大长度为1*/@Column(length = 1)private String gender;/** 座右铭 */private String motto;}

注:其中@Data、@Builder、@NoArgsConstructor、@AllArgsConstructor是属于lombok的注解,与JPA无关。

第四步:编写数据操作层接口

import com.aspire.jpademo.model.EmployeePO;
import org.springframework.data.jpa.repository.JpaRepository;/*** 直接继承JpaRepository<T, ID>接口即可,其中T代表对应的实体,ID为该表主键对应的字段的数据类型** 注:JpaRepository中默认提供了十几种 增、删、改、查(T对应的)表的方法** 注:JPA的实现框架会自动将此接口的实现注入到Spring上下文容器中, 我们使用时直接从Spring中获取即可** @author JustryDeng* @date 2019/4/22 21:14*/
public interface EmployeeMapper extends JpaRepository<EmployeePO, Long> {
}

注:直接继承JpaRepository<T, ID>接口即可,其中T代表对应的实体,ID为该表主键对应的字段的数据类型。

注:JpaRepository中默认提供了十几种增、删、改、查等操作的方法。

注:JPA的实现框架会自动将此接口的实现注入到Spring上下文容器中, 我们使用时直接从Spring中获取即可。


使用示例

声明:以下示例是最基本最简单的JPA使用示例,更多用法请自行查阅相关资料。

 

笔者寄语
       本文主要是演示SpringBoot如何整合并简单使用JPA,对JPA的具体使用用法没有深入学习(后面有机会的话,会进一步完善此文章)。JPA本身已经非常成熟了,其用法也十分丰富,甚至MyBatis等框架能完成的事,使用JPA也一样能完成。

 

^_^ 如有不当之处,欢迎指正

^_^ 测试代码托管链接 
               
https://github.com/JustryDeng/CommonRepository

^_^ 本文已经被收录进《程序员成长笔记(五)》,笔者JustryDeng


http://www.ppmy.cn/news/273806.html

相关文章

完美电脑主机一拖二,让你夫妻不再抢电脑,一台主机两人独立玩

近来闲着无事&#xff0c;突然想把家里的两台主机省出来一台&#xff0c;俩人玩一台主机&#xff0c;那电费得省多少啊&#xff0c;于是乎就开始找各种软件进行测试&#xff0c;最后选定了ASTER使用。 下面是本人的主机配置&#xff0c;以及需要的东西。 首先需要的是你的显卡有…

mysql查询bween_Mysql查询语句

一查询数值型数据: SELECT * FROM tb_name WHERE sum > 100; 查询谓词:>,,,!,!>,!,< 二查询字符串 SELECT * FROM tb_stu WHERE sname 小刘 SELECT * FROM tb_stu WHERE sname like 刘% SELECT * FROM tb_stu WHERE sname like %程序员 SELECT * FROM tb_stu WHER…

解决Betwin客户机经常无法正常登录带来的困扰

BeTwin是一套基于Windows系统环境下的软件,它可让多个用户同时、独立地共享一台PC机的软硬件及外部资源.....&#xff08;在这里不废话了&#xff0c;这些内容还是让读者自己去Google吧 :P&#xff09; 本文的主题是如何解决使用Betwin过程中主机正常启动&#xff0c;客…

JDK8-1-Lambda表达式(2)-方法传递(行为参数化)

JDK8-1-Lambda表达式&#xff08;2&#xff09;-方法传递&#xff08;行为参数化&#xff09; Java 8 允许程序将方法作为参数传递&#xff0c;先看一个例子&#xff1a; 苹果实体类&#xff1a; public class Apple {//颜色private String color;//重量&#xff0c;单位克&…

开放网关架构演进

淘宝开放平台是阿里与外部生态互联互通的重要开放途径&#xff0c;通过开放的产品技术把阿里经济体一系列基础服务&#xff0c;像水、电、煤一样输送给我们的商家、开发者、社区媒体以及其他合作伙伴&#xff0c;推动行业的定制、创新、进化, 并最终促成新商业文明生态圈。 开放…

银魂弹幕

银魂弹幕是本人对于动漫的喜欢&#xff0c;写的一个应援打CALL的弹幕软件&#xff0c;希望动漫发烧友们去参加喜欢的漫展&#xff0c;签售会时可以使用到&#xff0c;不用再举着笨重的灯牌。 主要功能 -查看当前时间 -填写弹幕内容&#xff0c;调整弹幕字体大小&#xff0c;…