Spring Data JPA 基本使用

Spring Data JPA

首先我们需要知道JPA是什么

JPA Java Persistence API:用于对象持久化的API.
那么什么是持久化呢?

  1. 持久化就是把数据保存到可以永久保存的存储设备中(如磁盘).
  2. 持久化的主要的应用是将内存中的对象保存到数据库中,或者磁盘文件中,XML数据文件中等等.

其次,JPA是一种规范,而不是和和Hibernate一样的产品.
JPA其本质就是一种ORM规范,而不是ORM框架,这是因为JPA的实现,只是提供了一些编程的API接口,也就是定义规范,但是具体的实现却不是本身实现的.

那么ORM又是什么呢?

  1. ORM Object Relational Mapping 对象关系映射.
  2. 本质就是将数据从一种形式转换到另外一种形式,通俗点就是通过使用对象和数据库之间映射的元素据,将OOP中的对象自动持久化到关系数据库中.

JPA中支持的技术

  1. ORM映射元数据:支持XML和注解两种形式,描述对象和表间的映射关系.
  2. API:用来操作实体对象,执行基本的CRUD操作,由框架在后台完成所有的事情,而开发者只需要实现接口,或者加上规范即可.
  3. 查询语言JPQL: 操作的对象是实体对象和实体属性.也就是通过面向对象而不是面向数据库的查询语言查询数据.
Spring Data JPA的使用
  1. 基本环境的搭建
    Spring Boot整合Spring Data Jpa
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    
    启用Web支持还需要在配置类上添加@EnableSpringDataWebSupport注解
    相关配置:
    server:
      port: 8080
      servlet:
        context-path: /
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false
        username: root
        password: 123456
      jpa:
        database: MySQL
        database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
        show-sql: true
        hibernate:
          ddl-auto: update
    
对于ddl-auto
create:每次运行程序时,都会重新创建表,故而数据会丢失
create-drop:每次运行程序时会先创建表结构,然后待程序结束时清空表
upadte:每次运行程序,没有表时会创建表,如果对象发生改变会更新表结构,原有数据不会清空,只会更新(推荐使用)
validate:运行程序会校验数据与数据库的字段类型是否相同,字段不同会报错
none: 禁用DDL处理
  1. 创建实体类
    实体类使用注解@Entity加上@Table(name=“table_name”)加上@Data
    这里的@Data是插件Lombok的使用,简化get/set/toString方法的书写.
    实体类中的字段:主键使用注解@Id和@GeneratedValue(strategy=GenerationType.IDENITY)主键自增的意思
    非主键使用@Column注解配置名称,长度,是否为空等.
  2. 在对应DAO包下创建相应的Repository,注意:这里也是一个接口
    public interface XXXDao extends Repository<T, id extends Serializable> {
        T getTById(Long id);
    }
    
    这里需要注意Repository接口:
    Repository接口是Spring Data的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法.
    该接口的原型为:
    public interface Repository<T, ID extends Serializable> { }
    
    Spring Data 使我们只定义接口,只要遵循规范,就无需写实现类.
    为了增加其他的功能,还有一些子接口:
    1. CrudRepository:继承Repository接口,实现了一组CRUD方法.
    2. PagingAndSortingRepository:继承CrudRepository接口,实现了一组分页和排序的方法.
    3. JpaRespository:继承PagingAndSortingRepository接口,实现一组JPA规范相关的方法
    4. 自定义的XXRepository:需要继承JpaRepository接口,这样这个接口就具有了通用的访问控制层的能力.
    5. JpaSecificatioinExecutor:实现一组JPA Criteria查询相关的方法.
  3. 接着,就是创建Service层的代码,一个XXService接口,和一个对应的XXServiceImpl的实现类
    Servive接口的实现类代码使用@Service注解,也就是该注解标注在XXServiceImpl类上,而不是接口上.
  4. 接着就可以编写控制层代码进行使用测试了,控制层也就是@Controller注解标注的,或者使用@RestController标注的,配合@RequestMapping注解一起使用.
方法定义的规范

简单条件查询
查询方法以 find read get 开头
涉及条件查询时,条件的属性用条件关键字连接,使用的是驼峰命名法
例如根据id和名字查询:

findByIdAndName(long id,String name);

复杂的查询就是按照:
find+全局修饰+By+实体的属性名称+限定词+连接词+其他实体属性+OrderBy+排序属性+排序方向
这个规范的书写.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值