初识Spring Data 全家族(1)

每天叫醒你的不是闹钟,而是姿势

1

前言

         在介绍Spring Dara Jpa之前,我们首先认识HIbernate。Hibernate是数据访问解决技术的绝对霸主,使用ORM映射技术实现数据访问,ORM映射将领域模型类和数据库的表进行映射,通过程序操作对象而实现表数据操作的能力,让数据访问操作无需关注数据库相关的技术。

           随着Hibernate的盛行,Hibernate主导了EJB3.0的JPA规范,即Java Persistence API。JPA是一个基于ORM映射的标准规范。所谓规范即只定义标准规则,不提供实现,软件提供商可以按照标准规范来实现,而使用者只需按照规范中定义的方式来使用。Spring Data JPA是Spring Data 的一个子项目,它通过提供基于JPA的Reposistory极大地减少了JPA作为数据访问方案的代码量。

2

Spring Data 家族

   Spring Data 包含的子项目

  • Commons - 提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化

  • Hadoop - 基于 Spring 的 hadoop 作业配置和一个 POJO 编程模型的 MapReduce 作业

  • Key-Value  - 集成了 Redis 和 Riak ,提供多个常用场景下的简单封装

  • Document - 集成文档数据库:CouchDB 和 MongoDB 并提供基本的配置映射和资料库支持

  • Graph - 集成 Neo4j 提供强大的基于 POJO 的编程模型

  • Graph Roo AddOn - Roo support for Neo4j

  • JDBC Extensions - 支持 Oracle RAD、高级队列和高级数据类型

  • JPA - 简化创建 JPA 数据访问层和跨存储的持久层功能

  • Mapping - 基于 Grails 的提供对象映射框架,支持不同的数据库

  • Examples - 示例程序、文档和图数据库

  • Guidance - 高级文档

Spring Data Commons

         Spring Data Commons 是上述各种Spring Data项目的依赖,它是Spring Data Repository的抽象。我们翻开源码看一下Spring Data Repository抽象的根接口

Repository接口:

package org.springframework.data.repository;

import java.io.Serializable;

public interface Repository<T, ID extends Serializable> {
}

源码中看出,它接受领域类和领域类的id类型作为类型参数。

我们查看子接口CrudReposotory(IDEA快捷键ctrl + alt + B)

package org.springframework.data.repository;

import java.io.Serializable;

@NoRepositoryBean
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
   <S extends T> S save(S var1);

   <S extends T> Iterable<S> save(Iterable<S> var1);

   T findOne(ID var1);

   boolean exists(ID var1);

   Iterable<T> findAll();

   Iterable<T> findAll(Iterable<ID> var1);

   long count();

   void delete(ID var1);

   void delete(T var1);

   void delete(Iterable<? extends T> var1);

   void deleteAll();
}

从源码看到该接口定义了CRUD操作相关的内容

继续查看子接口PagingAndSortingRepository

package org.springframework.data.repository;

import java.io.Serializable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
   Iterable<T> findAll(Sort var1);

   Page<T> findAll(Pageable var1);
}

该接口定义了分页与排序操作相关的内容

当然,Spring Data 项目还给我们定义了一个功能,根据属性名进行计数、删除、查询等方法(这里不做详解)

3

Spring Data JPA

使用Spring Data JPA建立数据访问层十分简单,只需定义一个继承JpaRepository的接口即可。

package com.zero.spring_data_jpa.dao;

import com.zero.spring_data_jpa.entity.Person;
import org.springframework.data.jpa.repository.JpaRepository;

/**
* @Author: Zero
* @Date: 2019/4/9 23:32
*/
public interface PersonRepository extends JpaRepository<Person, Long> {
   
}

继承JpaRepository接口之后,翻开源码,我们看到我们的接口已经默认有了下面的数据访问操作方法:

package org.springframework.data.jpa.repository;

import java.io.Serializable;
import java.util.List;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;

@NoRepositoryBean
public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
   List<T> findAll();

   List<T> findAll(Sort var1);

   List<T> findAll(Iterable<ID> var1);

   <S extends T> List<S> save(Iterable<S> var1);

   void flush();

   <S extends T> S saveAndFlush(S var1);

   void deleteInBatch(Iterable<T> var1);

   void deleteAllInBatch();

   T getOne(ID var1);
}

那么我们可以在service的实现层直接调用该接口的方法进行简单的CRUD操作。

历史文章

史上最全 | 1000G编程资料限时免费领取,打包带走

文末资源|程序员,你必须要懂的JVM结构

点击蓝字关注我们

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值