JPA
mybatisPlus
mybatis
JPA
Spring Data JPA为Java Persistence API(JPA)提供了实现。它简化了通过JPA访问数据库的开发工作,提供了很多CRUD的快捷操作,还提供了如分页、排序、复杂查询、自定义查询(JPQL)等功能,Spring Data JPA底层也是依赖于Hibernate来实现的,Spring Data JPA拥有标准化、简单易用、面向对象等优势,并且Spring将EntityManager 的创建与销毁、事务管理等代码抽取出来,并由Spring统一进行管理。
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
application.yml配置
server:
#指定服务端口号
port: 8008
spring:
application:
#应用名称
name: spring-data-jpa
datasource:
#你的数据库密码
password: 123456
#你的数据库地址
url: jdbc:mysql://localhost:3306/spring_test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=true
#数据库用户名
username: root
#数据库驱动名称
driver-class-name: com.mysql.cj.jdbc.Driver #配置MySQL的驱动程序类
#指定连接池类型
type: com.zaxxer.hikari.HikariDataSource
#数据库连接池的配置
hikari:
#客户端等待连接池连接的最大毫秒数
connection-timeout: 30000
#连接池中维护的最小空闲连接数
minimum-idle: 4
#最大池大小
maximum-pool-size: 8
#允许连接池在连接池中空闲的最长时间(毫秒)
idle-timeout: 30000
#池中连接关闭的最长生命周期(毫秒)
max-lifetime: 45000
#从池返回的连接的默认自动提交行为(默认为true)
auto-commit: true
#连接池的名称
pool-name: SpringDataJPAHikariCP
#jpa相关配置
jpa:
hibernate:
#DDL:用于定义数据库的三层结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性,安全控制等约束
ddl-auto: none #什么也不做
#其他可选值
#create: 每次运行应用程序时,都会重新创建表,所以,数据都会丢失
#create-drop:每次运行程序时会创建表结构,然后程序结束时清空数据
#update: 每次运行程序没有表时会创建表,如果对象改变会更新表结构,原有数据不会清除,只会更新
#validate: 运行程序会校验数据与数据库的字段类型是否相同,字段不同会报错
#打印执行的sql及参数
show-sql: true
# 关闭懒加载配置,否则会报错
open-in-view: false
properties:
hibernate:
#输出sql语句
show_sql: true
#格式化输出的sql,否则会一行显示
format_sql: true
环境准备:
数据库脚本
这里简单介绍一下表和表之间的关系,一个Banner对应多个BannerItem,属于一对多关系,一个Goods商品可以属于多个商品分类,一个商品分类下面会有多个商品,属于多对多关系,需要用第三张表goods_category_relation来进行组织。
JPA使用:
1.生成Entity实体类
2.创建repository包,编写Repository接口,需要继承JpaRepository接口,指定两个泛型
3.在Repository接口中编写对应方法3.1 简单查询
3.2 排序
3.3 分页
3.4 复杂查询- 自定义JPQL
3.5 JPA原生查询
3.6 多表联结之一对多关系映射
3.7 多表联结之多对多关系映射
3.8 动态sql
1.生成Entity实体类
@Table(name = “ding_xzbg_admin”)
@Entity:标志为一个JPA的实体类
@Getter、@Setter:表示设置实体类属性的Getter、Setter方法。
@Id注解:标志数据库表的主键字段。
@GeneratedValue(strategy = GenerationType.IDENTITY):指定主键的生成策略,当前指定的策略为主键自增,由数据库进行生成。
@Column:实体和数据表列不同名的时候才有用,如数据库字段banner_id,实体类字段id,这时就要使用@Column注解来标志数据库字段名称@Column(name=“banner_id”)
@Basic:标志是数据库表的列,这个注解会默认加载字段上,如果数据表没有这个字段将会报错。
@Transient:如果想忽略实体类的某一个字段时,可以使用这个注解,JPA就不会将这个字段作为数据表的列。
@Entity
@Getter
@Setter
public class Banner {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date modifyTime;
private Integer deleted