zoukankan      html  css  js  c++  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、分布式缓存、数据结构等等。
    file

  • 相关阅读:
    Asp.net Core 系列之--5.认证、授权与自定义权限的实现
    Asp.net Core 系列之--4.事务、日志及错误处理
    Asp.net Core 系列之--3.领域、仓储、服务简单实现
    Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作
    Asp.net Core 系列之--1.事件驱动初探:简单事件总线实现(SimpleEventBus)
    Cocos2d-x项目创建
    Cocos2d-x编译Android环境
    Linux 之 RPM
    Channels实现扫码登录
    SQLALchemy中关于复杂关系表模型的映射处理
  • 原文地址:https://www.cnblogs.com/MonsterJ/p/13567857.html
Copyright © 2011-2022 走看看