Spring Data Commons项目介绍

一点睛

Spring Data Commons有一个重要概念:Spring Data Repository抽象。使用Spring Data Repository可以极大地减少数据访问层的代码。既然是数据访问操作的统一标准,那肯定是定义了各种各样和数据访问相关的接口,下面来看看Spring Data Repository抽象的根接口是怎样定义的。

二关键源码解读

1Repository接口

package org.springframework.data.repository;

import java.io.Serializable;
//它接受领域类(JPA为实体类)和领域类的id类型作为类型参数
public interface Repository<T, ID extends Serializable> {

} 

2CrudRepository接口

//Repository的子接口CrudRepository定义了和CRUD操作相关的内容。
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 entity);         
    <S extends T> Iterable<S> save(Iterable<S> entities);
    //关于获取的函数
    T findOne(ID id);
    boolean exists(ID id);
    Iterable<T> findAll();
    Iterable<T> findAll(Iterable<ID> ids);
    long count();
    //关于删除的函数
    void delete(ID id);
    void delete(T entity);
    void delete(Iterable<? extends T> entities);
    void deleteAll();
}

3PagingAndSortingRepository接口

//定义了分页和排序操作相关的内容
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 sort);  //排序
    Page<T> findAll(Pageable pageable);  //分页
}

4 JpaRepository接口

//继承PagingAndSortingRepository,额外提供了一些其他的API
package org.springframework.data.jpa.repository;

import java.io.Serializable;
import java.util.List;

import javax.persistence.EntityManager;

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 sort);
    List<T> findAll(Iterable<ID> ids);
    <S extends T> List<S> save(Iterable<S> entities);
    void flush();
    <S extends T> S saveAndFlush(S entity);
    void deleteInBatch(Iterable<T> entities);
    void deleteAllInBatch();
    T getOne(ID id);
}

三SpringData项目其他功能

SpringData项目提供了一个激动人心的功能:根据属性名进行计数、删除、查询方法。

Spring Data项目提供了一个激动人心的功能:根据属性名进行计数、删除、查询方法。
public interface PersonRepositoty extends Repository<Person,Long>{
    //按照年龄计数
    Long countByAge(Integer age);
    //按照名字删除
    Long deleteByName(String name);
    //按照名字查询
    List<Person> findByName(String name);
    //按照名字和地址查询
    List<Person> findByNameAndAddres(String name,String address);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值