文档章节

spring data jpa

yjpfj1203
 yjpfj1203
发布于 2016/09/14 11:16
字数 246
阅读 13
收藏 0

一:常用方法名查询

  @Repository

public interface UserRepository extends CrudRepository<User, Long>{

    findByCustomerIdAndVisitTimeAfterOrderByDateUpdatedDesc();

    //user.customer.company.id=5

    findByCustomer_CompanyId(Long companyId);

}

常用关键字

二:对于复杂的查询,普通的查询无法满足时

        CriteriaBuilder builder = em.getCriteriaBuilder();

        CriteriaQuery<ClientDemand> query = builder.createQuery(ClientDemand.class);

        Root<ClientDemand> clientDemandRoot = query.from(ClientDemand.class);

        //实时查询,并且使用左连接查询,这样可以节省大量时间,查询时间

        //client1中有company属性

        clientDemandRoot.fetch("client1", JoinType.LEFT).fetch("company", JoinType.LEFT);

        List<Predicate> predicateList = new ArrayList<Predicate>();

        if (queryParam.getCreatorId() != null) {

            // 接待顾问处理

            Predicate issue = builder.equal(clientDemandRoot.get("creatorId"), queryParam.getCreatorId());

            predicateList.add(issue);

        }

        if (queryParam.getCompanyId() != null) {

            // 公司处理

            Predicate issue = builder.equal(clientDemandRoot.get("client1").get("company").get("id"),

                    queryParam.getCompanyId());

            predicateList.add(issue);

        }

        if (CollectionUtils.isNotEmpty(queryParam.getStatusList())) {

            // 状态列表处理

            In<DemandStatusEnum> in = builder.in(clientDemandRoot.get("status"));

            for (DemandStatusEnum status : queryParam.getStatusList()) {

                in.value(status);

            }

            predicateList.add(in);

        }

        /**

         * 时间处理

         */

        if (queryParam.getStartTime() != null) {

        if(isVisitTime){

        Predicate issue = builder.greaterThanOrEqualTo(clientDemandRoot.get("visitTime"), queryParam.getStartTime());

                predicateList.add(issue);

        }else{

        Predicate issue = builder.greaterThanOrEqualTo(clientDemandRoot.get("lastFollowTime"), queryParam.getStartTime());

                predicateList.add(issue);

        }

        }

        //clientDemand中有个users的多对多关系

      if(StringUtils.isNotBlank(userName)){

            //ListJoin<ClientDemand, User> userJoin = clientDemandRoot.join(clientDemandRoot.getModel().getList("users", User.class), JoinType.LEFT);

            Join<ClientDemand, User> userJoin = clientDemandRoot.join("users", JoinType.LEFT);

            Predicate issue = builder.equal(userJoin.get("name"), userName);

            predicateList.add(issue);

        }

        Predicate[] predicates = new Predicate[predicateList.size()];

        predicateList.toArray(predicates);

        query.where(predicates);

        return em.createQuery(query.orderBy(builder.desc(clientDemandRoot.get("dateUpdated")))).getResultList();

 

© 著作权归作者所有

yjpfj1203
粉丝 3
博文 11
码字总数 4434
作品 0
杭州
程序员
私信 提问

暂无文章

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部