Spring Boot Data JPA 相关操作

JPA配置

spring:
  jpa:
    hibernate:
      ddl-auto: update
    #显示SQL语句
    show-sql: true
    open-in-view: true #开启延长session
    #sql格式化显示
    properties:
      hibernate:
        format_sql: true

使用JPA注解定义实体类

@Entity @Table @Id @Colum @GeneratedValue

@GeneratedValue , steategy=

GenerationType.AUTO,由程序自动选择主键生成策略

GenerationType.IDENTITY,自增,MySQL

GenerationType.TABLE,jpa提供的一种机制,通过一张数据库表的形式帮助我们完成主键

GenerationType.SEQUENCE,自增,Oracle

实体类的属性和关系映射

一对一

@OneToOne(mappedBy="另一方关联属性名,将外键约束指执行交给另一方维护",cascade=CasecadeType.PERSIST)一对一映射关系,type:

ALL, 所有持久化操作
PERSIST, 插入操作时执行关联操作
MERGE, 修改操作时执行关联操作
REMOVE, 删除操作时执行关联操作

@JoinColumn(name="waijian_id")设置外键

一对多

@OneToMany一对多映射关系

@JoinColumn(name="waijian_id")设置外键

多对多

@ManyToMany一对多映射关系

@JoinTable(name="TB_USER_ROLE", joinColumns={@joinColumn(name="U_ID")}, inverseJoinColumns={@joinColumn(name="R_ID")})设置外键

JPA内置操作数据库

查询findAll(),findById(),findOne(),getById() ......

新增save()

更新:无

删除delete()......

如何自定义操作数据库方法

当 JPA 自带的功能满足不了我们的需求,也可以自定义的 SQL 来查询。自定在查询方法使用@Query,自定义删除修改方法需要@Query``@Modifying一起使用,还需要在业务逻辑层支持事务@Transactional

nativeQuery=true,表示使用原生SQL

@Query(value = "update User u set u.userName = ?1 where u.id = ?2",nativeQuery=true)

1,支持JPQL(Java持久性查询语言)和原生SQL

2,规范方法名,就可以不用写JPQL或原生SQL(前缀_By_对象属性,支持查询和删除操作)

3,Query by Example,用于动态查询(缺点较复杂 ),只支持查询操作。不支持嵌套或分组的属性约束,只支持字符串 start/contains/ends/regex匹配和其他属性类型的精确匹配。

4,通过Specifications,支持更灵活的动态查询

5,通过QueryDSL第三方框架实现动态查询,JPAQueryFactory构建查询条件

JPA的事务管理

事务的七种传播行为:

REQUIRED,spring默认,依赖于外部事务的存在,如果外部没有事务则创建一个新事务;

REQUIRES_NEW,始终开启一个新事务;

SUPPORTS,支持以当前事务方式运行,如果当前不存在事务,则会以非事务方式执行;

`NOT__SUPPORTED,以非事务方式运行;

MANDATORY,必须在一个已存在的事务中执行,否则会抛出异常;

NEVER,不允许方法在事务中运行,否则抛出异常;

NESTED,以嵌套事务方式运行;

事务的四种隔离级别:

未提交读【脏读问题】

已提交读【不可重复读问题】

可重复读【幻读问题】

可串行化【最高隔离级别】

如何优化数据库性能

索引、合理设计数据库表结构

待完善......

JPA的缓存机制、如何配置和使用JPA的缓存

待完善......

JPA乐观锁

private @Version Long version 乐观锁,自动加字段,每次修改版本加一

JPA审计功能, Auditing

实体类注解

@CreatedBy创建人

@CreatedDate创建时间

@LastModifiedBy最后修改人

@LastModifiedDate最后修改时间

@Temporal 保存时间类型

配置类

@EnableJpaAuditing

实现 AuditorAware<T> 接口,重写 getCurrentAuditor(),设置当前用户

实体类中还需要要声明 @EntityListeners(AuditingEntityListener.class)

posted @   little_lunatic  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示