1.相遇
上次的通过一个简单的crud例子简单的对spring-data-jpa有了初步的了解,但是仅仅是在crudRepository在开发过程中的使用还是远远不够的。
虽然如此,这里还是先对crudRepositoy提供的接口进行简单的罗列
public interface CrudRepository<T, ID> extends Repository<T, ID> {
/**
*Saves the given entity. 保存提供的实体类
*/
<S extends T> S save(S entity);
/**
*Returns the entity identified by the given ID. 返回给定id的实体类
*/
Optional<T> findById(ID primaryKey);
/**
*Returns all entities.返回所有实体类
*/
Iterable<T> findAll();
/**
*Returns the number of entities.返回更多实体类
*/
long count();
/**
*Deletes the given entity. 删除给定的实体类
*/
void delete(T entity);
/**
*Indicates whether an entity with the given ID exists. 校验给定主键的实体类是否存在
*/
boolean existsById(ID primaryKey);
// … more functionality omitted.
}
2.相识(肯能会蒙蔽,最后一节看了就不会了)
·分页和排序
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
下面是用法,findAll的排序需要Sort,入参分页需要pageable作为入参
/**分页*/
public static PageRequest of(int page, int size)
public static PageRequest of(int page, int size, Sort sort)
public static PageRequest of(int page, int size, Direction direction, String... properties)
/**排序*/
public static Sort by(String... properties)
public static Sort by(Direction direction, String... properties)
//Order by(String property),Order asc(String property),Order desc(String property)
public static Sort by(List<Order> orders)
public static Sort by(Order... orders)
分页函数的入参需要调用PageRequest.of()方法生成,可选的参数有page(页码),size(每页大小),Sort(排序对象),Direction(升序降序的枚举类)
分页函数的入参需要调用Sort.by()方法生成,提供的可选入参properties(属性),Direction(升序降序的枚举类),Order(排序对象)
·自定义方法
interface UserRepository extends CrudRepository<User, Long> {
long deleteByLastname(String lastname);
List<User> removeByLastname(String lastname);
}
我们也可以在Repostitory中加入方法<操作By属性名(变量)>即可实现简单的自定义。
3.相知
上一节可能会有点蒙,那个是为了方便以后了解了用法快速查阅的,这里来进行下总结。
1.分页要求的入参是Pageable接口,PageRequest继承了AbstractPageRequest而AbstractPageRequest实现了Pageable接口,因此我们只需要调用Pageable.of()生成是一个实例即可
2.分页请求(pageRequest)中3号实例化方法除了分页参数之外,还需要提供 Direction direction, String... properties参数,这两个参数组合使用,用于指定排序,Direction是排序枚举,可以指定升序降序,properties不用多说见名知意指定属性(好吧我还是说了)。这两个参数在生成实例化对象时调用了Sort.by(direction, properties)
实例化了一个排序对象(Sort).同时调用了实例化请求对象2号方法。这里说明下无论是3中实例化分页请求中任意一个方法,实际上最终都是调用了方法2,方法一也是调用了Sort.unsorted()方法返回一个指明不排序的Sort;
3.关于排序的几个实例化方法,无论你是直接指定List<Order> orders,还是调用by(String... properties)
最终都会在实例化Sort对象时转换成List<Order> orders,并赋值给Sort对象中的orders属性。
至此上述实例化中的所有参数也已经讲述完毕,今天的一篇也到此结束了,如果这篇文章有幸被某个需要它的人看到那么是它荣幸,没有的话也没关系,至少我会一直使用它。本文参考了spring-Data-jpa的英文api文档和源码,如果有描述不正确的地方希望斧正。
最后跪求点个赞,来个收藏,评论一下,那将是我莫大的荣幸。(老子爱你,挂了哦)
网友评论