ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 一、概述 JPA诞生的是为了整合第三方ORM框架,建立一种标准的方式; 我们可以认为JPA是标准,是一套规范,JPA几乎都是接口,Hibernate是实现技术。 ## 二、spring-data-jpa Spring-data-jpa,是Spring与JPA的整合技术; >[danger] 使用它无须自己实现自定义JpaRepository接口的实现类,而是仅仅定义自定义的继承自JpaRepository的接口即可;使用的时候,通过@Autowired自动装配; > 为什么要这么做呢?原因是:spring-data-jpa提供基础的CRUD工作,同时也提供业务逻辑的功能,所以我们的自定义Repository接口要做两项工作,继承spring-data-jpa提供的基础CRUD功能的接口,比如JpaRepository接口,同时自己还需要定义自己的方法,那么导致的结局就是自己的接口中有很多的方法,那么如果我们的接口实现类中实现自定义Repository接口,导致的后果就是我们势必需要重写里面的所有方法,这是Java语法的规定,如此一来,悲剧就产生了,接口实现类里面我们有很多的@Override方法,这显然是不行的。 因此,Spring-data-jpa通过cglib动态代理的方式,解决了这个问题,我们不需要自己去实现这个接口了; ## 三、 默认CRUD方法 基本查询也分为两种,一种是 Spring Data 默认已经实现,一种是根据查询的方法来自动解析成 SQL。 1、实体定义 ``` @Entity @Table(name="SYS_ACCESS") public class Access implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private Long ACCESS_ID; private String SESSION_ID; private String ACCESS_TIME; private String ACCESS_IP; private String BROWSER_INFO; private String ACCESS_URL; private Long VERSION; private String DESC_CNT; //GET/SET } ``` > Entity 中不映射成列的字段得加 @Transient 注解,不加注解也会映射成列; > 2、Dao继承 JpaRepository ``` public interface AccessDao extends JpaRepository<Access,Long>{ } ``` >[warning] 我们需要为每一个实体类都创建一个repository接口,我们自定义的repository接口都需要去继承JpaRepository接口,以具有所有的数据层操作功能; > 2、使用默认方法 ``` @RequestMapping("/staff") public Access getString() { Access access = new Access(); access.setACCESS_IP("123"); accessDao.saveAndFlush(access); return access; } ```