wm_concat
(
distinct tt.extend_code
)
,
sum
(
rr.annuali_count
)
,
count
(
distinct rr.staff_id
)
from tm_duct_whole rr
left
join
tm_duct_extend_data tt
on rr.industry_type
=
tt.extend_code
where tt.extend_type
=
3
and rr.is_close
=
0
and rr.is_login
=
1
and rr.industry_type is not null
group by tt.extend_id, tt.extend_name
转化为jpa实现的编程,借助模板使用函数。具体的操作如下所示:
//编译生成的实体类
QTmDuctWhole tmDuctWhole = QTmDuctWhole.tmDuctWhole;
QBasicData basicData = QBasicData.basicData;
SimpleTemplate<Double> annualiCount = Expressions
.template(Double.class, "round(sum(ANNUALI_COUNT))");
//进行字符串拼接
SimpleTemplate<String> extendCode = Expressions
.template(String.class, "to_char(wm_concat(distinct EXTEND_CODE))");
//计算总人数
SimpleTemplate<Integer> userCount = Expressions
.template(Integer.class, " count(distinct staff_id)");
List<TrackBean> industryList = secondaryJpaSqlQuery()
.select(Projections.bean(TrackBean.class,
basicData.extendId.as("extendId"),
basicData.extendName.as("extendName"),
extendCode.as("extendCode"),
annualiCount.as("annualiCount"),
userCount.as("count")))
.from(tmDuctWhole).leftJoin(basicData)
.on(tmDuctWhole.industryType.eq(basicData.extendCode))
.where(basicData.extendType.eq(3)
.and(tmDuctWhole.isClose.eq(0))
.and(tmDuctWhole.isLogin.eq(1))
.and(tmDuctWhole.industryType.isNotEmpty()))
.groupBy(basicData.extendId, basicData.extendName)
.fetch();
原生的sql中使用的函数,具体的sql实现如下:select tt.extend_id, tt.extend_name, wm_concat(distinct tt.extend_code), sum(rr.annuali_count), count(distinct rr.staff_id) from tm_duct_whole ...
这个模拟的是mysql的DATE_FORMAT(date,format)和FROM_UNIXTIME()
函数
的一起
使用
,因为项目
中
一个发布时间的设定是时间戳,所以需要
使用
FROM_UNIXTIME()来把时间戳转化。
实现业务逻辑:
按照小时分组统计的功能
SELECT
DATE_FORMAT(FROM_UNIXTIME(publish_time/1000),'%Y-%m-%d %H...
如果是初次
使用
QueryDSL
的同学建议去这篇博客:SpringData
JPA
+
QueryDSL
玩转态动条件/投影查询,本文针探讨的是
使用
时遇到的一些问题:
如何
使用
Projections.bean投影属性到查询对象,简化代码?
如何
使用
级联查询,关联同一张表两次?
1. Projections简化代码,使代码更优雅
使用
Projections方法可以更简单更方便的返回自定义的参数...
楼主项目
中
要求所有的SQL必须以
JPA
的
QueryDsl
格式进行数据库操作,其
中
有一个稍微复杂点的嵌套子查询,网上资料比较少,而且子查询也特别简单。费了好大的劲才搞出来,现贴出来供大家参考。
这是MyBatis的查询格式:
select dd.crm_province as 省编码,
dd.province_name as 省份,
nvl(dd.annco...
https://blog.csdn.net/qq_38230774/article/details/88870649和
https://blog.csdn.net/qq_38230774/article/details/88870649和
https://bbs.csdn.net/topics/392207536的资料
先说需求 查询每个月的数据量是多少
本例项目源码地址
本文内容前提建立在自己对
Jpa
和hibernate有所了解。由于自己比较喜欢
使用
Gradle作为构建工具,所以项目基本都
使用
Gradle为例。如果本文有存在错误,希望大家指出说明。
使用
Spring boot作为基本环境,添加相关依赖。数据库这里采用Mysql
depen...
querydsl
-
jpa
是一个基于 Java 语言的开源 ORM 查询框架,它提供了一种类型安全、流畅的 API 接口,使得查询
JPA
实体变得更加容易和简单。通过
使用
querydsl
-
jpa
,开发人员可以避免常见的
JPA
查询繁琐和容易出错的情况,同时,也可以享受到类型安全、易于维护和更加高效的查询体验。
querydsl
-
jpa
的主要特点包括:
1. 类型安全的查询:
querydsl
-
jpa
提供了一种类型安全的查询 API 接口,完全避免了
使用
字符串拼接的方式来生成 SQL 语句的情况。
2. 支持
JPA
实体:
querydsl
-
jpa
能够直接与
JPA
实体进行交互,从而使得在查询
中
使用
的实体更加类型化和直观。
3. 支持复杂查询操作:
querydsl
-
jpa
支持诸如嵌套子查询、联合查询、分页查询、排序查询等常见的查询操作,从而满足了更加复杂的查询需求。
4. 提供完整的类型支持:
querydsl
-
jpa
支持传统的 SQL 数据类型,例如 INTEGER、VARCHAR 等,也支持
JPA
支持的所有类型,例如 Date、Time、Timestamp、Boolean 等。
5. 可维护性强:
querydsl
-
jpa
生成的查询语句易于阅读和维护,从而减少了因为 SQL 语句难以阅读和理解而带来的错误和困难。
综上所述,
querydsl
-
jpa
是一种高效、易用、类型安全、并且具有完整类型支持的 ORM 查询框架,它极大地方便了 Java 开发人员进行
JPA
实体查询操作,提高了项目的开发效率和质量。
关于项目报错:Error:Cannot build artifact 'XXX:war exploded' because it is included into a circular dep
关于项目报错:Error:Cannot build artifact 'XXX:war exploded' because it is included into a circular dep
Maynor996:
querydsl+jpa编程中如何使用函数
springboot项目之间接口的相互调用
java持续实践: