认识JPA的接口---Java持久化API(2)

认识JPA的接口

前言

JPA提供了操作数据库的接口。在开发过程中继承和使用这些接口,可简化现有的持久化开发工作。可以使Spring 找到自定义接口,并生成代理类,后续可以把自定义接口注入Spring容器中进行管理。在自定义接口过程中,可以不写相关的SQL操作,由代理自动生成。

JPA接口JpaRepository

JpaRepository 继承自 PagingAndSortingRepository。该接口提供了JPA的相关实用功能。以及通过Example进行查询的功能。Example对象是JPA提供用来构造查询条件的对象。该接口的关键代码如下:

public interface JpaRepository <T, ID> extends PagingAndSortingRepository<T, ID>,QueryByExampleExecutor<T> {}

在上述代码中,T表示实体对象,ID表示主键。ID必须实现序列化。

JpaRepository提供的方法

方法描述
List< T > findAll();查询所有实体
List< T > findAll(Sort var1)排序、查找所有实体
List< T > findAllById( Iterable< ID > var1 );返回制定一组ID的实体
< S extends T >List< S > saveAll( Iterable< S > var1)保存集合
void flush执行缓存与数据库同步
< S extends T > S saveAndFlush( S var1 )强制执行持久化
void deleteInBatch( Iterable< T > var1 )删除一个实体集合
void deleteAllInBatch()删除所有实体
T getOne( ID var1 )返回ID对应的实体。如果不存在,则返回空值
< S extends T >List< S > findAll(Example< S > var1)查询满足Example的所有对象
< S extends T > List< S > findAll( Example< S > var1, Sort var2 )查询满足Example的所有对象,并且进行排序返回

分页排序接口 PagingAndSortingRepository

PagingAndSortingRepository继承自CurdRepository提供的分页和排序方法。其关键代码如下。

@NoRepositoryBean
public interface PagingAndSortingRepository<  T,ID >extendsCurdRepository<T,ID>{
	Iterable<T> findAll(Sort var1);
	Page<T> findAll(Pageable var1);
}

其中两种方法:

  • Iterable< T > findAll(Sort sort);排序功能。它按照“sort”制定的排序返回数据
  • Page findAll(Pageable pageable):分页查询(含排序功能)

数据操作接口 CurdRepository

CurdRepository接口继承自Repository接口,并新增了增加、删除、修改和查询方法。CurdRepository提供的方法见下表。

方法说明
< S extends T> S save(S entity)保存实体。当实体中包含主键时,JPA会进行更新操作
< S extends T > Iterable< S > saveAll( Iterable< S > entities )保存所有实体。实体必须不为空
“Optional< T > findById(ID id)”根据主键id 检索实体
“boolean exstsById(ID id)”根据主键id检索实体,并返回是否存在。值为布尔类型
Iterable < T > findAll返回所有实体
Iterable< T > findAllById(Iterable< ID > ids)根据给定的一组id值返回一组实体
long count()返回实体的数量
void deleteById(ID id)根据id删除数据
void delete(T entity)删除给定实体
void deleteAll(Iterable< ? entends T > entities)删除实体
void deleteAll()删除所有实体

分页接口Pageable 和 Page

Pageable 接口用于构造翻页查询,返回Page对象。Page从0开始分页。
例:可以通过以下代码来构建文章的翻页查询参数

 @RequestMapping("/article")
    public ModelAndView articlelist(@RequestParam(value = "start", defaultValue = "0") Integer start,
                                    @RequestParam(value = "limit", defaultValue = "5") Integer limit) {
        start = start < 0 ? 0 : start;
        Sort sort = Sort.by(Sort.Direction.DESC, "id");
        Pageable pageable = PageRequest.of(start, limit, sort);
        Page<Article> page = articleRepository.findAll(pageable);
        ModelAndView mav = new ModelAndView("article/list");
        mav.addObject("page", page);
        return mav;
    }

然后,在调用它的参数获取总页数、上一页、下一页和末页,代码如下:

		<div>
            <a th:href="@{/article(start=0)}">[首页]</a>
            <a th:if="${not page.isFirst()}" th:href="@{/article(start=${page.number-1})}">[上页]</a>
            <a th:if="${not page.isLast()}" th:href="@{/article(start=${page.number+1})}">[下页]</a>
            <a th:href="@{/article(start=${page.totalPages-1})}">[末页]</a>
        </div>

排序类Sort

Sort类专门用来处理排序。最简单的排序就是先传入一个属性列,然后根据属性列的值进行排序。默认情况下是升序排列。它还可以根据提供多个字段属性值进行排序。例如以下代码是通过Sort.Order对象的List集合来创建Sort对象的:

		List<Sort.Order> orders = new ArrayList<>();
        orders.add(new Sort.Order(Sort.Direction.DESC,"id"));
        orders.add(new Sort.Order(Sort.Direction.ASC,"view"));
        Pageable pageable = PageRequest.of(start,limit,sort);
        Pageable pageable1 = PageRequest.of(start,limit,Sort.by(orders));

Sort排序的方法有以下几种

  • 直接创建Sort对象,适合对单一属性做排序
  • 通过Sort.Order对象创建Sort对象,适合对单一对象做排序
  • 通过属性的List集合创建Sort对象,适合所有情况,比较容易设置排序方式
  • 忽略大小写排序
  • 使用JpaSort.unsafe进行排序
  • 使用聚合函数进行排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值