插件 JPA Buddy 开启自动提示
@Id
@Entity
@GeneratedValue(strategy = GenerationType.IDENTITY) 主键自增
@Column(name = "id") 对应列名
@EnableJpaRepositories(basePackages="包路径") //启动jpa
@Modifying //通知springdata是增删改的操作
@PersistenceContext //在注入对象时,只为该对象开启一个独立的线程,解决了SpringDataxia线程安全的问题
Jpa 4种状态
临时状态/ 持久状态 / 删除状态 /游离状态
Hibernate操作
Session session = sf.openSession
Transaction tx = session.beginTransaction(); //开启事务
Customer customer = new Customer; //pojo 对象
customer . setId(1L);
session.find(customer.class,1L).var;
session.save(customer);
查询 -- find 饿汉式
-- load 懒加载
新增 -- save
更新 -- update
删除 -- remove
-----------------------------------
Jpa操作
EntityManager em = factory.createEntityManager();
EntityTransaction tx = em.getTransaction(); //开启事务
tx.begin(); tx.commit();
A a = new A();
a.setId(44L);
em.persist(a); //新增
em.find(A.class,44L); //查询
em.getReference(A.class,44L); //懒查询
a.setId(45L)
a.setName("狐狸");
如果指定了主键,更新:1.查询 如果有变化更新,没有变化不更新
如果没有指定主键 执行插入
em.merge(a); //修改
删除 --- 先查后删
em.find(A.class,45L)
em.remove(a);
自定义操作:
- jpql(原生SQL)
- @Query
- 查询如果返回单个实体 就用pojo接收 ,如果是多个需要通过集合
- 参数设置方式
- 索引: ?数字
- 具名: :参数名 结合@Param注解指定参数名字
- 增删改
- 要加上事务的支持;
- 如果是插入方法:一定只能是hibernate下才支持(Insert into ...select)
- 规定方法名
支持的查询方法主题关键字(前缀)
决定当前方法作用
只支持查询和删除
- Query by Example //动态sql
.withIgnoreCase(“Adress”) //设置忽略大小写
.withStringMatcher(ExampleMatcher.StringMatcher.ENDING) //所有条件设置结尾匹配
.withMatcher”Adress”,m->m.endswith()); //针对单个条件进行限制 --当启用这个api时,忽略大小写会失效
- 通过Specifications
- 继承接口JpaSpecificationExcutor<对象>
- 通过拿到需要设置条件的字段
- 通过CriteriaBuilder设置不同类型的条件
Demo测试
动态查询编写代码
- 通过Querydsl
- 继承 QuerydslPredicateExecutor<Basic>
- 添加Q 类插件
Demo
继承此类可实现分页和排序的功能
Page分页
Sort排序
修改,删除,新增
简写:
基于Hibernate 进行多表操作
- 配置关联关系
在需要关联的pojo类里指定关联类
@OneToOne(cascade = CascadeType.PERSIST....) //一对一
@JoinColumn(name = “account_id”) //设置外键的字段名
继承PagingAndSortingRepository<Basic,long>
@OneToMany //一对多 默认懒加载 需要开启事务readOnly = true
@JoinColumn(name = “account_id”) //设置外键的字段名
@ManyToOne //多对一
@ManyToMany(cascade = CascadeType.ALL) // 多对多
@JoinTable(name = “中间表名” joinColumns = {@JoinColumn(name = “c_id”)},inverseJoinColumns = {@JoinColumn(name = “r_id”)})
Private List<A> a;
Demo
注意事项:
Hibernate中的乐观锁 -> 防止并发修改 private @Version Long version;
审计 --
创建人 最后修改人 创建时间 修改时间
配置1:
4项写在pojo类上
Pojo类上+@EntityListeners(AuditingEntityListener.class)
@CreatedBy //创建人
String createdBy;
@LastModifiedBy //最后修改人
String modifiedBy;
@Temporal(TemporalType.TIMESTAMP)
@CreatedDate //创建时间
protected Date dateCreated = new Date();
@Temporal(TemporalType.TIMESTAMP)
@LastModifedDate //修改时间
protected Date dateModified = new Date();
配置2:
Config类配置
类上+@EnableJpaAuditing
构建此方法
配置3:
添加如下依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
Spring Boot 自动配置Spring Data - JPA原理
- 通过添加spring-boot-starter-data-jpa依赖自动实现
- 通过配置文件application.properties自动连接数据库
- 通过JpaBaseConfiguration 配置了之前集成Spring data jpa的基本Bean
- JpaRepositoriesAutoConfiguration == @EnableJpaRepositories