[spring-data-jpa]增删改查详解

作者: 小贾同学coding | 来源:发表于2020-03-17 23:47 被阅读0次

    ReadMe

    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文档和源码,如果有描述不正确的地方希望斧正。
     最后跪求点个赞,来个收藏,评论一下,那将是我莫大的荣幸。(老子爱你,挂了哦)

    目录

    相关文章

      网友评论

        本文标题:[spring-data-jpa]增删改查详解

        本文链接:https://www.haomeiwen.com/subject/dnnxyhtx.html