文章目录
- SpringDataJPA
-
- 概述
- 核心注解
- 简单使用
-
- 配置打印的SQL携带参数
- 原理 = JDK动态代理
- 简单代码 = 内置接口
- 自定义SQL语句
-
- 查询
-
- 方式1:dao查询方法名的形式 - 方法名必须findBy开头
- 方式2:JPQL查询形式
- 方式3:SQL查询形式
- 方法4:代码级别查询,类似MyBatisPlus
- 三种返回类型 = 根据自己的喜好进行选择
- 修改、删除
- 多表操作
-
- 一对多,多对一
-
- 查询
- 插入
- 多对多
-
- 查询
SpringDataJPA
概述
?
核心注解
简单使用
配置打印的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动态代理
-
@Repository定义的dao接口会经过JDK动态代理转成 SimpleJpaRepository对象执行具体的CRUD操作
-
SimpleJpaRepository通过EntityManager对象执行具体的CRUD操作
-
而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连接器