乐趣区

关于java:作为一个Java程序员连简单的分页功能都会写你好意思嘛

明天想说的就是可能在咱们操作数据库的时候更简略的更高效的实现,现成的 CRUD 接口间接调用,方便快捷,不必再写简单的 sql,带吗简略易懂,话不多说上办法

1、Utils.java 工具类中的办法

1 /**  2  * 获取 Sort
 3  *
 4  * @param direction  - 排序方向
 5  * @param column - 用于排序的字段
 6  */
 7 public static Sort getSort(String direction,String column){
 8     Sort sort = null;
 9     if(column == null || column == "") return null;
10     if(direction.equals("asc")||direction.equals("ASC")){11         sort =  Sort.by(Sort.Direction.ASC,column);
12     }else {13         sort =  Sort.by(Sort.Direction.DESC,column);
14     }
15     return sort;
16 }
17 /**
18  * 获取分页
19  * @param pageNumber 当前页
20  * @param pageSize  页面大小
21  * @param sort 排序;sort 为空则不排序只分页
22  * @return 分页对象
23  */
24 public static Pageable getPageable(int pageNumber,int pageSize,Sort sort){25    if(sort!=null){26        return PageRequest.of(pageNumber,pageSize,sort);
27    }
28        return PageRequest.of(pageNumber,pageSize);
29 }
30  /**
31      * 判断 String 是否为空
32      * @param str
33      * @return
34      */
35     private static boolean isEmpty(String str){36         if(str.equals(null)||str.equals("")) return true;
37         return false;
38     } 

2、实现类

这里查问相干参数是前端传的,所以用默认值了,查问条件能够是多条件动静,排序也能够是动静的,只有传排序字段和排序方向对号入座即可。

@Override
public Page<User> findAll() {
    // 创立测试对象
    User user = new User();
    user.setName("1");
    Sort sort = Utils.getSort("asc","name");
    Pageable pageable = Utils.getPageable(0,5,sort);
    // 调用组装查问条件办法
    Specification<User> spec = getSpecification(user);
    return userRepository.findAll(spec,pageable);
}

/**
 * 组装查问条件
 * @param user - 查问相干对象
 * @return 返回组装过的多查问条件
 */
private Specification<User> getSpecification(User user) {Specification<User> specification = new Specification<User>() {
        @Override
        public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {List<Predicate> predicates = new ArrayList<>();
            // 判断条件不为空
            if(!Utils.isEmpty(user.getName())){predicates.add(criteriaBuilder.like(root.get("name"),user.getName()));
            }
            return criteriaQuery.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();}
    };
    return specification;
}

3.repository 类中这么写

@Repository
 
public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {}

最初

私信回复 材料 支付一线大厂 Java 面试题总结 + 阿里巴巴泰山手册 + 各知识点学习思维导 + 一份 300 页 pdf 文档的 Java 外围知识点总结!

这些材料的内容都是面试时面试官必问的知识点,篇章包含了很多知识点,其中包含了有基础知识、Java 汇合、JVM、多线程并发、spring 原理、微服务、Netty 与 RPC、Kafka、日记、设计模式、Java 算法、数据库、Zookeeper、分布式缓存、数据结构等等。

退出移动版