SpringBoot集成SpringData - JPA

插件 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);

自定义操作:

  1. jpql(原生SQL)
  1. @Query
  1. 查询如果返回单个实体 就用pojo接收 ,如果是多个需要通过集合
  2. 参数设置方式
  1. 索引: ?数字
  2. 具名: :参数名   结合@Param注解指定参数名字
  1. 增删改
  1. 要加上事务的支持;
  2. 如果是插入方法:一定只能是hibernate下才支持(Insert into ...select)
  1. 规定方法名

支持的查询方法主题关键字(前缀)

   决定当前方法作用

       只支持查询和删除

  1. Query by Example  //动态sql

.withIgnoreCase(“Adress”)  //设置忽略大小写

.withStringMatcher(ExampleMatcher.StringMatcher.ENDING)  //所有条件设置结尾匹配

.withMatcher”Adress”,m->m.endswith());  //针对单个条件进行限制 --当启用这个api时,忽略大小写会失效

  1. 通过Specifications
  1. 继承接口JpaSpecificationExcutor<对象>
  2. 通过拿到需要设置条件的字段

  1. 通过CriteriaBuilder设置不同类型的条件

Demo测试

 

动态查询编写代码

  1. 通过Querydsl
    1. 继承  QuerydslPredicateExecutor<Basic>
    2. 添加Q 类插件

 

Demo

 

继承此类可实现分页和排序的功能

Page分页

Sort排序

修改,删除,新增

简写:

基于Hibernate 进行多表操作

  1. 配置关联关系

在需要关联的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原理

  1. 通过添加spring-boot-starter-data-jpa依赖自动实现
  2. 通过配置文件application.properties自动连接数据库

  1. 通过JpaBaseConfiguration 配置了之前集成Spring data jpa的基本Bean
  2. JpaRepositoriesAutoConfiguration == @EnableJpaRepositories

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.杨先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值