zoukankan      html  css  js  c++  java
  • Spring Data


    public interface RoleRepository extends JpaRepository<Role, Long>,JpaSpecificationExecutor{
    role getByName(String name);
    }
    JpaRepository<Role, Long>接口,他的父接口PagingAndSortingRepository提供了分页和排序方法,父父接口CrudRepository开启了事务功能,提供了增删改方法,源接口Repository提供了repository规范。范型第一个填javabean,第二个填主键类型。

    条件查询规范(源接口的功能)



    举个例子。以下这个方法名的效果就是,where lastName like ?% and id<?
    List(Person) getByLastNameStartingWithAndIdLessThan(String lastName,Integer id);
    再举一个例子。where email in (?,?,?,-----) or birth < ?
    List(Person) getByEmailInOrBirthLessThan(List(String) emails,Date birth)
    看着很方便,但是不够灵活去处理复杂的查询业务,名字太长不好。

    使用@query注解(源接口的功能)

    @Query("select * from Person p where p.name=?1 and p.email=?2", nativeQuery = true)
    List(Person)test1(String Name,String email);
    ?1,?2是占位符,顺序和参数顺序对应。
    最好加上nativeQuery = true,这样就能使用sql。

    CrudRepository接口提供的方法

    public interface CrudRepository<T, ID> extends Repository<T, ID> {
    <S extends T> S save(S var1);//保存
    
    <S extends T> Iterable<S> saveAll(Iterable<S> var1);
    
    Optional<T> findById(ID var1);
    
    boolean existsById(ID var1);
    
    Iterable<T> findAll();
    
    Iterable<T> findAllById(Iterable<ID> var1);
    
    long count();
    
    void deleteById(ID var1);
    
    void delete(T var1);
    
    void deleteAll(Iterable<? extends T> var1);
    
    void deleteAll();
    

    PagingAndSortingRepository接口提供的方法(不能提供带查询条件的分页方法)

    ` public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
    Iterable<T> findAll(Sort var1);
    
    Page<T> findAll(Pageable var1);
     }`
    `例子:
    @Autowired
    private PersonRepository pRepository;
    public void test2(){
    int pageNo = 0;//第一页
    int pageSize = 5;
    PageRequest pageable=new PageRequest(pageNo,pageSize);
    Page(Person) page= pRepository.findAll(pageable);
    
    page.getTotalElements();//总记录数
    page.getNumber()+1;//当前是第几页
    page.getTotalPages;//总页数
    //--------------------------------------
    //排序
    Order o1=new Order(Direction.DESC,"id");
    Order o2=new Order(Direction.ASC,"email");
    ---
    Sort sort=new Sort(o1,o2,---);
    PageRequest pageable=new PageRequest(pageNo,pageSize,sort);
    //同分页了
    }`
    

    jpaRepository接口提供的方法

    List<T> findAll();
    
    List<T> findAll(Sort var1);//排序
    
    List<T> findAllById(Iterable<ID> var1);
    
    <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);
    
    <S extends T> List<S> findAll(Example<S> var1);
    
    <S extends T> List<S> findAll(Example<S> var1, Sort var2);
    

    JpaSpecificationExecutor接口(对分页的补充,可以在分页时加上条件查询)


    `public interface JpaSpecificationExecutor {
    Optional findOne(@Nullable Specification var1);

    List<T> findAll(@Nullable Specification<T> var1);
    
    Page<T> findAll(@Nullable Specification<T> var1, Pageable var2);
    
    List<T> findAll(@Nullable Specification<T> var1, Sort var2);
    
    long count(@Nullable Specification<T> var1);
    }`
    PageRequest pageable=new PageRequest(pageNo,pageSize,sort);//同上
    Specification<Person> specification=new Specification<Person>(){
    //@param root: 代表查询的实体类。可以取到本类属性(某个类)的属性。
    //@param query:可以添加查询条件。
    //@param cb:获取到Predicate 对象。
    //return:Predicate 类型,代表一个查询条件。
    @Override
    public Predicate toPredicate(Root<Person> root,criteriaQuery<?> query,CriteriaBuilder cb){
    Path path=root.get("id");
    Predicate p=cb.gt(path,5);//大于5
    return predicate;
    }
    }
    Page<Person> page=pRepository.findAll(specification,pageable);
  • 相关阅读:
    健壮性与可靠性
    invoke与call
    协变性和逆变性
    枚举类型和位标记
    MacOs mysql 安装
    scp -本地文件上传服务器,指定端口
    java中的无穷大和无穷小
    calendar类-时间处理类
    linux 下ln命令--笔记
    hdfs 文件系统命令操作
  • 原文地址:https://www.cnblogs.com/zhuxiang1029/p/14902991.html
Copyright © 2011-2022 走看看