【Spring Boot 】JPA 的基本使用

news/2024/9/25 7:26:02/

1.JPA描述

JPA(Java Persistence API)是一种Java编程接口,用于简化Java应用程序与数据库之间的交互。它提供了一种标准的持久化方式,可以将Java对象映射到关系型数据库表中,实现对象和数据库之间的转换。通过JPA,开发人员可以使用面向对象的方式来操作数据库,而不需关注数据库细节和编写大量的SQL语句,从而提高开发效率和代码质量。JPA还提供了方便的查询语言JPQL,支持复杂的查询操作。

2.JPA搭建

  • 在pom.xml文件中添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
  • 在application.yml文件中添加数据库和jap
spring:datasource:url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456druid:initial-size: 5 #连接池初始化大小min-idle: 10 #最小空闲连接数max-active: 20 #最大连接数web-stat-filter:exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" #不统计这些请求数据stat-view-servlet: #访问监控网页的登录用户名和密码login-username: druidlogin-password: druidjpa:hibernate:#更新或者创建数据库表结构ddl-auto: updatedialect: org.hibernate.dialect.MySQL5InnoDBDialect#控制台显示SQLshow-sql: true
  • 实体类应用
@Data
@Entity
@Table(name = "test")
public class Test {@Column@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Columnprivate String name;@Column(name="phone")private Integer phone;
}
  • 创建 Repository
    创建一个 Repository 接口,继承自 JpaRepository,用于对实体类进行 CRUD 操作。
public interface TestRepository extends JpaRepository<Test, Long> {
}
  • 使用 Repository
@Service
public class TestService {@Autowiredprivate  TestRepository  testRepository;public  Test save( Test test) {return testRepository.save(test);}public  Test findById(Long id) {return testRepository.findById(id).orElse(null);}public List<Test> findAll() {return testRepository.findAll();}public void deleteById(Long id) {testRepository.deleteById(id);}
}
  • 如果使用Repository接口需要在启动应用程序上添加注解@EnableJpaRepositories
    如果在项目中仅对数据库添加或更新字段,不使用Repository可不添加注解@EnableJpaRepositories
@SpringBootApplication
@EnableJpaRepositoriespublic class ApiApplication extends SpringBootServletInitializer {public static void main(String[] args) {SpringApplication.run(ApiApplication.class, args);}
}

3.JPA 常用注解

JPA 提供了许多注解来映射实体类与数据库表之间的关系,以下是 JPA 常用的注解:

  • @Entity:将实体类映射到数据库表上。

  • @Table:指定实体类映射到的数据库表名。

  • @Id:指定实体类中的属性为主键。

  • @GeneratedValue:指定主键的生成策略。

  • @Column:指定属性与数据库表中的字段的映射关系。

  • @OneToMany:指定一对多关系。

  • @ManyToOne:指定多对一关系。

  • @ManyToMany:指定多对多关系。

  • @MappedSuperclass:注解用于标识一个类是一个超类,不会映射到数据库表中,但其属性会被子类继承。当多个实体类具有相同的属性时,可以创建一个@MappedSuperclass注解的抽象类,将这些共同属性定义在超类中,然后子类使用@Inheritance(strategy = InheritanceType.JOINED)注解指定继承关系,从而避免重复定义属性。子类不需要额外的映射信息,而是通过继承的方式自动继承超类的属性,避免了重复性的代码编写。

    使用@MappedSuperclass注解主要可以达到以下几点目的:

    1. 避免重复定义属性:当多个实体类具有相同的属性时,可以将这些共同属性定义在@MappedSuperclass注解的超类中,避免重复编写相同属性。
    2. 提高代码复用性:通过将共同属性定义在超类中,可以让多个子类继承这些属性,提高了代码的复用性。
    3. 提高维护性:统一定义共同属性在超类中,一旦这些属性有改动,只需修改一处,所有继承该超类的子类都会受到影响,提高了代码的维护性。
  • @EnableJpaRepositories:用于启用JPA存储库接口,以便Spring Boot应用程序能够自动扫描并管理这些接口。


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

相关文章

c++【入门】你多大了

时间限制 : 1 秒 内存限制 : 128 MB 一天玩仔跑来问周周你多大了&#xff0c;周周告诉他自己 1010 岁了&#xff0c;玩仔又说自己也是&#xff0c;你听到了这个对话&#xff0c;想用程序显示出两个人的对话内容&#xff0c;现在就来试一试吧。 输入 无 输出 输出三行&…

不同linux账户切换不同的cuda版本

原因 由于服务器中安装了两个版本的cuda&#xff08;cuda10.1和cuda11.1&#xff09;&#xff0c;不同项目可能需要应用不同的cuda版本&#xff0c;但是自己又没有root权限或者只想在使用指定conda环境时改为用指定的cuda版本。总结起来有三种方法&#xff1a; 1、修改软链接指…

Claude 3可使用第三方API,实现业务流程自动化

5月31日&#xff0c;著名大模型平台Anthropic宣布&#xff0c;Claude3模型可以使用第三方API和工具。 这也就是说&#xff0c;用户通过文本提问的方式就能让Claude自动执行多种任务&#xff0c;例如&#xff0c;从发票中自动提取姓名、日期、金额等&#xff0c;该功能对于开发…

Vue基础(2)响应式基础

一. reactive() 在 Vue3 中&#xff0c;可以使用 reactive() 创建一个响应式对象或数组&#xff1a; <script setup> import { reactive } from vueconst state reactive({ count: 0 }) </script><template><button click"state.count">{…

【全开源】防伪溯源一体化管理系统源码(FastAdmin+ThinkPHP和Uniapp)

一款基于FastAdminThinkPHP和Uniapp进行开发的多平台&#xff08;微信小程序、H5网页&#xff09;溯源、防伪、管理一体化独立系统&#xff0c;拥有强大的防伪码和溯源码双码生成功能&#xff08;内置多种生成规则&#xff09;、批量大量导出防伪和溯源码码数据、支持代理商管理…

前端将DOM元素导出为图片

前端工作中经常会用到把一些元素导出&#xff0c;比如表格&#xff0c;正好项目有遇到导出为excel和导出为图片&#xff0c;就都封装实现了一下&#xff0c;以供其他需求的开发者使用&#xff1a; 1.导出为文档 这个说白了就是下载的功能&#xff0c;传过去检索参数&#xff…

WIFI 万[néng]钥匙 v5.0.10/v4.9.80 SVIP版!

WiFi Master Key v5.0.10/v4.9.80 WIFI万[Nng]钥匙APP是一款专业的网络连接工具&#xff0c;设计宗旨在于为用户提供方便快捷的WiFi接入方案。本应用集成了覆盖全国的大量免费WiFi热点信息&#xff0c;确保用户能够在不同地区快速而稳定地连接到互联网。此外&#xff0c;该应用…

计算机网络学习实践:模拟PPP协议验证虚拟局域网(VLAN)

计算机网络实践&#xff1a;模拟PPP协议&&验证虚拟局域网&#xff08;VLAN&#xff09; 挺有意思的大家可以跟着做一做&#xff0c;我是跟着韩志刚老师的视频做的 https://www.bilibili.com/video/BV1Qr4y1N7cH?p31&vd_source7831c5b97cfc5c745eb48ff04f6515e7 …