Spring Data JPA介绍及使用方法

JPA与JDO

  在介绍Spring体系中的JPA之前,首先要理清楚什么叫JPA,什么是JDO。

  JPA全称为Java Persistence API,也就是标准的编程规范。主要是用来进行ORM映射,但是没有提供更具体的实现,由第三方厂商提供实现,其中Spring Data JPA是Spring提供的一套解决方案。Spring Data则提供一整套数据访问层的解决方案,致力于减少数据访问层DAO的开发量。Spring Data JPA可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。
  JDO全称Java Data Object,也是一套ORM标准,但是JDO支持的东西更多。可以理解JPA是JDO的一个子集。


Spring Data JPA开发

  使用Spring Data JPA进行DAO的开发,需要三个步骤:

  1. 声明持久层的接口,继承Repository interface或者使用注解@RespositoryDefinition(domainClass=yourClass.class, idClass=Long.class)这种方式。
  2. 在接口中声明需要的业务方法,Spring Data根据给定的API规范来生成实现代码(可执行的SQL)。
  3. 需要将声明的持久层接口,配置成一个代理对象。说白了就是要注册成一个bean,有两种方式:一个是使用注解,一个是使用配置文件

注:如果需要对数据库的表进行动态的更改,但同时又可以保留表中数据,则加上配置

<prop key="hibernate.hbm2ddl.auto">update</prop>
或者
spring.jpa.hibernate.ddl-auto=update
这里慎用create,因为create会将原先生成的数据库表删除并生成新的,这样会覆盖掉原来的数据。

  主要来看看Spring Data JPA提供的接口,也是Spring Data JPA的核心概念:

  1. Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组件扫描的时候自动识别。
  2. CrudRepository :是Repository的子接口,提供CRUD的功能
  3. PagingAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能
  4. JpaRepository:是PagingAndSortingRepository的子接口,增加了一些实用的功能,比如:批量操作等。
  5. JpaSpecificationExecutor:用来做负责查询的接口
  6. Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可
  7. Repository:最顶层的接口,是一个空接口,目的是为了统一所有Repository类型,且能让组件扫描时自动识别。

  开发规范

  1. 对于不需要写实现类的情况:定义XxxxRepository 接口并继承JpaRepository接口,如果Spring data所提供的默认接口方法不够用,可以使用@Query在其中定义个性化的接口方法。
  2. 对于需要写实现类的情况:定义XxxxDao 接口并继承com.aceona.appleframework.persistent.data.GenericDao
    书写XxxxDaoImpl实现类并继承com.aceona.appleframework.persistent.data.GenericJpaDao,同时实现XxxxDao接口中的方法

开发参考:
Spring Data JPA: 为所有Repository添加自定义方法
https://www.tianmaying.com/tutorial/spring-jpa-custom-all#comment-list

spring mvc 的jpa JpaRepository数据层 访问方式汇总
https://www.cnblogs.com/sllina/p/5694808.html

JPA注解大全详解参考手册
https://blog.csdn.net/yswknight/article/details/79257372

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值