资讯详情

JPA学习2 - 核心注解、注解进行增删改查、List查询结果返回类型、一对多、多对一、多对多

文章目录

  • SpringDataJPA
    • 概述
    • 核心注解
    • 简单使用
      • 配置打印的SQL携带参数
      • 原理 = JDK动态代理
      • 简单代码 = 内置接口
      • 自定义SQL语句
        • 查询
          • 方式1:dao查询方法名的形式 - 方法名必须findBy开头
          • 方式2:JPQL查询形式
          • 方式3:SQL查询形式
          • 方法4:代码级别查询,类似MyBatisPlus
          • 三种返回类型 = 根据自己的喜好进行选择
        • 修改、删除
        • 多表操作
          • 一对多,多对一
            • 查询
            • 插入
          • 多对多
            • 查询

SpringDataJPA

概述

? 在这里插入图片描述

核心注解

策略
策略
策略
策略
a
@MappedSuperclass:标记这个基类存储表的共同字段,继承类直接继承即可
@Entity:标记这个实体类是与数据库表映射的
@Table:标记这个实体的表信息
@Id:标记该属性是主键列
@GeneratedValue:标记该主键的生成策略
IDENTITY == 自增 == MySQL支持
SEQUENCE == 序列 == Oracle支持
AUTO == 程序自动帮我们选择策略
TABLE == 序列 == JPA提供的一个机制,通过数据库表形式帮助主键自增 = 所有表共用一个自增字段=如下图
@Query:自定义SQL语句 = 查询、修改、删除语句
value:JPQL、SQL语句
nativeQuery:默认false,JPQL语句查询,true本地SQL语句查询
@Modify:用于标识 修改、删除的方法
@Column:标记该列的信息
@OneToMany:一对多的注解,一般标识在list属性上
@JoinColumn:一对多,多对一,主表主键与关联表外键的定义
@ManyToOne:多对一的注解,一般标识在JavaBean属性上
@NotFound:没有找到记录时的行为,默认是抛出异常

简单使用

配置打印的SQL携带参数

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>


        <!--hibernate对JPA规范的支持包-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.4.30.Final</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <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>

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.6.3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <!--监控sql日志 == SQL可以携带参数,如果用JPA自带的SQL打印是没携带参数的-->
        <dependency>
            <groupId>org.bgee.log4jdbc-log4j2</groupId>
            <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
            <version>1.16</version>
        </dependency>

    </dependencies>

server:
  port: 8080

spring:
  datasource:
    username: root
    password: root
# url: jdbc:mysql://localhost:3306/lrc_blog_test2?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    url: jdbc:log4jdbc:mysql://localhost:3306/lrc_blog_test2?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
# driver-class-name: com.mysql.cj.jdbc.Driver
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
  jpa:
    show-sql: true
    database-platform: org.hibernate.dialect.MySQL8Dialect
    database: mysql
    hibernate:
# ddl-auto: create

原理 = JDK动态代理

  1. @Repository定义的dao接口会经过JDK动态代理转成 SimpleJpaRepository对象执行具体的CRUD操作

  2. SimpleJpaRepository通过EntityManager对象执行具体的CRUD操作

  3. 而EntityManager具体的实现由Hibernate进行执行JDBC操作

简单代码 = 内置接口

server:
  port: 8080

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/lrc_blog_test?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    show-sql: true
    database-platform: org.hibernate.dialect.MySQLDialect
    database: mysql
    open-in-view: true

@Getter
@Setter
@ToString
@Entity
@Table(name = "book")
public class Book implements Serializable { 
        
    private static final long serialVersionUID = 2095940921263481761L;



    /** 主键 - 记录插入自动填充主键处理{@path application.yml} */
    @Id
    @Column(name = "id")
    private String id;

    @Column(name = "create_time")
    private String createTime;

    @Column(name = "update_time")
    private String updateTime;

    /** 记录是否被逻辑删除:0未删除 1逻辑删除 - 逻辑处理值定义{@path application.yml}*/
    @Column(name = "is_del")
    private Integer isDel;

    /** 书籍状态;-1违规 0发布且公开 1发布且私密 - 默认0 */
    @Column(name = "status")
    private String status;

    /** 书名 */
    @Column(name = "name")
    private String name;

    /** 作者 */
    @Column(name = "author")
    private String author;

    /** 作者国籍 */
    @Column(name = "country")
    private String country;

    /** 下载地址 */
    @Column(name = "download_url")
    private String downloadUrl;

    /** 文件类型 */
    @Column(name = "file_type")
    private String fileType;

    
        标签: c08连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台