• 【Spring Boot 】JPA 的基本使用


    1.JPA描述

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

    2.JPA搭建

    • 在pom.xml文件中添加依赖
    
        org.springframework.boot
        spring-boot-starter-data-jpa
    
    
    • 在application.yml文件中添加数据库和jap
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        druid:
          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: druid
            login-password: druid
      jpa:
        hibernate:
          #更新或者创建数据库表结构
          ddl-auto: update
          dialect: org.hibernate.dialect.MySQL5InnoDBDialect
        #控制台显示SQL
        show-sql: true
    
    • 实体类应用
    @Data
    @Entity
    @Table(name = "test")
    public class Test {
    	
    	@Column
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        @Column
        private String name;
    
        @Column(name="phone")
        private Integer phone;
    }
    
    • 创建 Repository
      创建一个 Repository 接口,继承自 JpaRepository,用于对实体类进行 CRUD 操作。
    public interface TestRepository extends JpaRepository {
    }
    
    • 使用 Repository
    @Service
    public class TestService {
    
        @Autowired
        private  TestRepository  testRepository;
    
        public  Test save( Test test) {
            return testRepository.save(test);
        }
    
        public  Test findById(Long id) {
            return testRepository.findById(id).orElse(null);
        }
    
        public List findAll() {
            return testRepository.findAll();
        }
    
        public void deleteById(Long id) {
            testRepository.deleteById(id);
        }
    }
    
    • 如果使用Repository接口需要在启动应用程序上添加注解@EnableJpaRepositories
      如果在项目中仅对数据库添加或更新字段,不使用Repository可不添加注解@EnableJpaRepositories
    @SpringBootApplication
    @EnableJpaRepositories
     public 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应用程序能够自动扫描并管理这些接口。

  • 相关阅读:
    ansible入门
    LeetCode //C - 127. Word Ladder
    SQL语言的规则与规范
    Kotlin MultiPlatform(KMP)
    【手把手带你学JavaSE】第八篇:抽象类和接口
    linux下C语言如何操作文件(二)
    ASP.NET Core - 依赖注入(四)
    开源之夏 2023 | Databend 社区项目总结与分享
    【ES】笔记-Map介绍与API
    flutter 记录学习不一样的动画(二)
  • 原文地址:https://blog.csdn.net/Ls66666Ls/article/details/139316112