代码编织梦想

@Service
public class StatisticalCommonServiceImpl implements StatisticalCommonService, ISqlEntity {

  public SQLQuery getAssetDocByDocTypesAndSendTimeOrEHospitalTime2(LocalDateTime sendstarttime, LocalDateTime sendendtime,
                                                                     LocalDateTime entrystarttime, LocalDateTime entryendtime, List<Long> departIds,
                                                                     Long userid, Boolean isNursePush, Boolean isConfirmed,
                                                                     Boolean isDoctorSend, String docType, String grade1, String grade2,
                                                                     String otherDocType, String otherGrade, String preMeasure) {

        Map<String, List<Long>> docGitlogMap = this.getConfigDocGitlog();
        //case when jpa用法
        CaseBuilder.Cases<String, StringExpression> expression1 = new CaseBuilder()
                .when(filterDocTypeAndGrade1(docType, grade1, grade2, docGitlogMap)).then(docType);
        CaseBuilder.Cases<String, StringExpression> expression = new CaseBuilder()
                .when(filterDocTypeAndGrade1(otherDocType, otherGrade, null, docGitlogMap)).then(otherDocType);
        //临时表路径及表别名
        final StringPath xxx = Expressions.stringPath("xxx");

        final StringPath yyy = Expressions.stringPath("yyy");

        //构建SQLQuery无法获取的函数查询
        StringTemplate vte = Expressions.stringTemplate("group_concat({0})", Expressions.stringPath(xxx, "vte"));
        StringTemplate blooding = Expressions.stringTemplate("group_concat({0})", Expressions.stringPath(xxx, "blooding"));

        StringExpression stringExpression = null;
        SQLQuery query1 = sqlQueryFactory.selectDistinct(
                getPatVisitA().id.as("visitid"), getPatVisitA().visittime.as("visittime"),
                getPatVisitA().entryhospital.as("entryhospital"), getPatVisitA().departmentid.as("departmentid"), getPatScoreResultA().groupno,
                expression1.otherwise(stringExpression).as("vte"),
                expression.otherwise(stringExpression).as("blooding"))
                .from(getPatScoreResult().as("patScoreResult"))
                .leftJoin(getPatVisit(), getPatVisitA()).on(getPatVisitA().id.eq(getPatScoreResultA().visitid))
                .leftJoin(getPatVisitExtra(), getPatVisitExtraA()).on(getPatVisitA().id.eq(getPatVisitExtraA().visitid))
                .leftJoin(getDocInfo(), getDocInfoA()).on(getDocInfoA().id.eq(getPatScoreResultA().docid))
                .leftJoin(getGitDocInfo(), getGitDocInfoA()).on(getGitDocInfoA().id.eq(getDocInfoA().parent));
        basicWhereFilter1(query1, departIds, null, null, null, isConfirmed, isDoctorSend, isNursePush);
        //医生推送时间筛选
        if (sendendtime != null && sendstarttime != null) {
            query1.where(getPatScoreResultA().sendtime.between(sendstarttime, sendendtime));
        }
        //入院时间或就诊时间筛选
        if (entrystarttime != null && entryendtime != null) {
            query1.where(getPatVisitA().entryhospital.between(entrystarttime, entryendtime).or(getPatVisitA().visittime.between(entrystarttime, entryendtime)));
        }
        //预防方式筛选
        if (StringUtils.isNotEmpty(preMeasure)) {
            BooleanExpression combooleanTemplate = Expressions.booleanTemplate(" JSON_EXTRACT({0}, '$.title')={1} ", getPatScoreResultA().advice, preMeasure);
            query1.where(getPatScoreResultA().advice.isNotEmpty().and(getPatScoreResultA().advice.isNotNull()).and(combooleanTemplate));
        }

        //连接临时表及查询临时表字段用法
        SQLQuery query2 = sqlQueryFactory.select(
                Expressions.numberPath(Long.class, xxx, "visitid").max().as("visitid"), Expressions.dateTimePath(LocalDateTime.class, xxx, "visittime").max().as("visittime"),
                Expressions.dateTimePath(LocalDateTime.class, xxx, "entryhospital").max().as("entryhospital"), Expressions.numberPath(Long.class, xxx, "departmentid").max().as("departmentid"),
                vte.as("vte"), blooding.as("blooding")
        ).from(query1, xxx).groupBy(Expressions.numberPath(Long.class, xxx, "groupno"));

        SQLQuery<TTaskPatient> query3 = sqlQueryFactory.select(Projections.bean(TTaskPatient.class,
                Expressions.numberPath(Long.class, yyy, "visitid"), Expressions.dateTimePath(LocalDateTime.class, yyy, "visittime"),
                Expressions.dateTimePath(LocalDateTime.class, yyy, "entryhospital"), Expressions.numberPath(Long.class, yyy, "departmentid")
        )).from(query2, yyy)
                .where(Expressions.stringPath(yyy, "vte").isNotNull()
                        .and(Expressions.stringPath(yyy, "blooding").isNotNull()));

        return query3;
    }
}
public interface ISqlEntity {

    default QPatScoreResult getPatScoreResult() {
        return new QPatScoreResult("pat_score_result");
    }


    default QPatVisit getPatVisit() {
        return new QPatVisit("pat_visit");
    }

    default QPatVisit getPatVisitA() {
        return new QPatVisit("patVisit");
    }

//PatScoreResult实体表达式路径
    default QPatScoreResult getPatScoreResultA() {
        return new QPatScoreResult("patScoreResult");
    }

    default QPatVisitExtra getPatVisitExtra() {
        return new QPatVisitExtra("pat_visit_extra");
    }

    default QPatVisitExtra getPatVisitExtraA() {
        return new QPatVisitExtra("patVisitExtra");
    }

    default QDocInfo getDocInfo() {
        return new QDocInfo("doc_info");
    }

    default QDocInfo getDocInfoA() {
        return new QDocInfo("docInfo");
    }

    default QDocInfo getGitDocInfo() {
        return new QDocInfo("doc_info");
    }

    default QDocInfo getGitDocInfoA() {
        return new QDocInfo("gitDocInfo");
    }

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45102619/article/details/127993712

利用jpa+querydsl实现多条件动态查询_ifjerry的博客-爱代码爱编程_querydsl 多对多查询

相信很多人在做订单管理的时候会用到多条件的检索,比如说查询订单状态是已支付的,金额在100-200之间的商铺a的已完结的订单,这样的多条件。 实现方式有多种,核心就一个if和判空。今天学习了querydsl,来具体回顾一下。

jpa、querydsl常用查询以及对照sql-爱代码爱编程

项目源码 一、动态条件查询 平时使用最多的场景,根据传入的条件动态拼接查询,类似mybatis中的if标签。根据条件判断是否添加条件查询,添加exist子句查询,根据关键字模糊查询id和关键字等。如下所示: public Predicate buildPredicate() { QWxUser qWxUser = QWxUser.wxUser

JPA通过querydsl做连表查询-爱代码爱编程

个人博客:https://javaniuniu.com/结论: jpa只适合单表操作通过 querydsl 实现复杂的sql (在复杂的连表面前也难办)jpa 是个大坑,做链表查询会把人累死首选 mybitas有哪个大神能做出来 记得留言区板凳文章末尾有querydsl 相关配置需要实现sql select me.address as address,

springboot集成queryDSL并实现多表关联分页查询JPAQuery&QueryResults-爱代码爱编程

源码地址:https://gitee.com/yk001/base.git 在之前单表查询的基础上 1,定义一个VO @Data public class BaseEntityVO { private Long id; private String name1; private String name2; priva

SpirngData-JPA QueryDSL 快速入门-爱代码爱编程

SpirngData-JPA QueryDSL 快速入门 不可否认的是 JPA 使用是非常方便的,极简化的配置,只需要使用注解,无需任何 xml 的配置文件,语义简单易懂,但是,以上的一切都建立在单表查询的前提下的,我们可以使用 JPA 默认提供的方法,简单加轻松的完成 CRUD 操作。 但是如果涉及到多表动态查询, JPA 的功能就显得有些捉襟见肘了

jpa 动态sql拼接_JPA实现@Query手写原生sql拼接动态sql并分页的方法-爱代码爱编程

import java.math.BigDecimal; import java.util.Collections; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext;

java左关联_java – 使用spring数据jpa和querydsl进行左连接-爱代码爱编程

我正在使用spring数据jpa和querydsl并且如何编写简单的好查询以便左连接两个表. 假设我有一个Project实体和一个在Project中定义了OneToMany关系的Task实体,我想做类似的事情: select * from project p left join task t on p.id = t.project_id where

jpa+QueryDSL-爱代码爱编程

QueryDSL 简介 QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询。Querydsl可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者是SQL的查询语句,也就是说QueryDSL是基于各种ORM框架以及SQL之上的一个通用的查询框架。借助QueryDSL可以在任何支持的ORM框架或者SQ

Spring Data JPA + QueryDSL-爱代码爱编程

Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率! Spring Data JPA 让我们解脱了DAO层的操作,基本上所有C

JPA结合querydsl使用-爱代码爱编程

目录 依赖 配置连接数据库 写实体类 如果出现Cannot resolve table 'XXX'  Repository层 控制层  查 不使用分页  使用分页  增 删 改 通过save更改 自己写sql语句 联表查询 自动生成(增加,修改)日期 整合querydsl 依赖 生成Q类  Repository继

jpa,querydsl 原生sql 查询分页,动态参数-爱代码爱编程

1.  entityManager  createNativeQuery 查询功能 /** * @Author: linkar * @Date: 2022/7/4 * @Description: 分页获取数据 * @Param mysql: 传入的sql 如 select a,b from tablename