首页 > 编程语言 > 详细

SpringData JPA

时间:2021-06-01 23:46:10      阅读:25      评论:0      收藏:0      [点我收藏+]

                                Spring Data JPA             

1,什么是JPA

 

     JPA (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的凌乱局面。JPA 在充分吸收了现有 Hibernate,TopLink,JDO 等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从上面的解释中我们可以了解到JPA 是一套规范,而类似 Hibernate,TopLink,JDO 这些产品是实现了 JPA 规范。了解了什么是 JPA,我们来看看本文的主角——spring data jpa

2,Spring Data JPA

       Spring 基于 ORM 框架、JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 JPA 技术实现,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率。什么意思呢?如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便。但是Spring Data JPA框架功能更进一步,为我们做了 一个数据持久层框架几乎能做的任何事情

3,为什么使用SpringData JPA

3.1核心接口:Repositories

    它需要域类来管理以及域类的 id类型作为类型参数。该接口主要用作标记接口,以捕获要使用的类型并帮助您发现扩展该接口的接口。该CrudRepository接口为正在管理的实体类提供复杂的 CRUD 功能。

CrudRepository页面:

技术分享图片

 

 

 

3.2接口继承图:

 技术分享图片

 

 

 

 

 

3.3相关注解

 

3.3.1@Entity

 

是一个类注解,用来注解该类是一个实体类用来进行和数据库中的表建立关联关系,首次启动项目的时候,默认会在数据中生成一个同实体类相同名字的表(table),也可以通过注解中的 name 属性来修改表(table)名称, 如@Entity(name=user) , 这样数据库中表的名称则是 user 。该注解十分重要,如果没有该注解首次启动项目的时候你会发现数据库没有生成对应的表。

 

3.3.2@Table

 

注解也是一个类注解,该注解可以用来修改表的名字,该注解完全可以忽略掉不用,@Entity 注解已具备该注解的功能。

 

3.3.3@Id

 

类的属性注解,该注解表明该属性字段是一个主键,该属性必须具备,不可缺少。

 

3.3.4@GeneratedValue 

 

该注解通常和 @Id 主键注解一起使用,用来定义主键的呈现形式,该注解通常有多种使用策略,先总结如下:

 

GenerationType.IDENTITY :该注解由数据库自动生成,主键自增型,在 mysql 数据库中使用最频繁,oracle 不支持。

 

GenerationType.AUTO:主键由程序控制,默认的主键生成策略,oracle 默认是序列化的方式,mysql 默认是主键自增的方式。

 

GenerationType.SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列,Oracle支持,Mysql不支持。

 

GenerationType.TABLE:使用一个特定的数据库表格来保存主键,较少使用。

 

4案例:

4.1pom:

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>

 

4.2yml:

spring:
  datasource:
    name: mybdb
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/exam001?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    show-sql: true #控制台打印sql
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect #这是数据库的方言配置
        hbm2ddl:
          auto: create  #启动是创建表,不建议使用(建议创建表之后改为update) 

4.3主启动类:

@EnableJpaRepositories("repositroy类所在的包") 

4.4entity:

@Data
@Entity(name = "student") //指定表名
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //主键自增
    private Integer id ;
    @Column(nullable = false, unique = true)
    private  String username;
    @Column(nullable = false, unique = true)
    private  String userPwd;
}

  

4.5创建 Respositroy类:

 

注意:JpaRepository<T,id> id 的类型根据实体类的id类型来判断

 

public interface StudentRespositroy extends JpaRepository<Student, Integer > {
 
}

  

4.6Controller 类:(略,编写自己需要的接口方法即可)

5,自定义Sql

   @Query()

@Transactional
public interface StudentRespositroy extends JpaRepository<Student, String> {
 
      @Query(value = "select s from student s")
      List<Student> selAll();
}   

  

  

 

SpringData JPA

原文:https://www.cnblogs.com/anqiao/p/14838612.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!