日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

queryDsl引入Mysql内置函数示例

發布時間:2023/12/20 数据库 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 queryDsl引入Mysql内置函数示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面

之前用過stringTemplate,類似如下使用方式,但適用函數有限

StringTemplate dateExpr = Expressions.stringTemplate("DATE_FORMAT({0},'%Y-%m-%d')",qtc.chargeCostTime);JPAQuery<ProjectViewVO> jpaQuery = new JPAQuery<>(em).select(Projections.bean(ProjectViewVO.class, // 返回自定義實體的類型dateExpr.as("chargeCostTime"),qtc.chargeCostHour,qt.title,qt.taskId,qp.name.as("projectName"),qp.projectId,qt.groupName.as("projectGroup"),qu.userName,qu.userCode))

四舍五入

@Test// round,四舍五入 // select tcity0_.country as col_0_0_, round(tcity0_.id, 1) as col_1_0_ from t_city tcity0_public void round() {JPAQueryFactory queryFactory = new JPAQueryFactory(em);StringTemplate Expr = Expressions.stringTemplate("ROUND({0},1)",qtCity.id);final List<Tuple> list = queryFactory.select(qtCity.country,Expr).from(qtCity).fetchResults().getResults();System.out.println(list.toString());}@Test// round,四舍五入 // select tcity0_.country as col_0_0_, round(avg(tcity0_.id), 1) as col_1_0_ from t_city tcity0_ group by tcity0_.countrypublic void round2() {JPAQueryFactory queryFactory = new JPAQueryFactory(em);StringTemplate Expr = Expressions.stringTemplate("ROUND({0},1)",qtCity.id.avg());final List<Tuple> list = queryFactory.select(qtCity.country,Expr).from(qtCity).groupBy(qtCity.country).fetchResults().getResults();System.out.println(list.toString());}

這里簡單介紹下,QueryDsl引入其他Mysql內置函數的記錄

一、兩個基礎配置類

第一個

import org.hibernate.dialect.MySQL5Dialect; import org.hibernate.dialect.function.SQLFunctionTemplate; import org.hibernate.type.StandardBasicTypes;// 自定義函數 public class CustomMysqlDialect extends MySQL5Dialect {public CustomMysqlDialect() {super();this.registerFunction("group_concat", new SQLFunctionTemplate(StandardBasicTypes.STRING, "group_concat(?1)"));// 這里還可繼續增加自定義引入的Mysql內置函數} }

第二個

import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.orm.jpa.JpaVendorAdapter; import org.springframework.orm.jpa.vendor.AbstractJpaVendorAdapter; import org.springframework.orm.jpa.vendor.Database; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;@Configuration public class JpaConfiguration {@Beanpublic JpaVendorAdapter jpaVendorAdapter() {AbstractJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();adapter.setShowSql(true);adapter.setDatabase(Database.MYSQL);// package to CustomMysqlDialectadapter.setDatabasePlatform("com.wondertek.pis.config.CustomMysqlDialect");adapter.setGenerateDdl(false);return adapter;} }

二、使用測試

2.1、group_concat()

JPAQueryFactory jqf = new JPAQueryFactory(em);SimpleTemplate<String> simpleTemplate = Expressions.simpleTemplate(String.class, "group_concat({0})", pg.name);JPAQuery<ProjectAdminVO> limit = jqf.select(Projections.constructor(ProjectAdminVO.class,pp.projectId,pp.status,pp.name,pp.type,pc.contractCode,simpleTemplate,pc.contractName,pc.signStatus,pc.contractMoney,pc.estimateMoney // ptcp.chargeCostHour.sum().round())).from(pp).leftJoin(pg).on(pp.projectId.eq(pg.projectId)).leftJoin(pc).on(pp.contractId.eq(pc.contractId)) // .leftJoin(ptcp).on(pp.projectId.eq(ptcp.projectId)).where(builder).groupBy(pp.projectId).orderBy(pp.projectId.asc()).offset(pageable.getOffset()).limit(pageable.getPageSize());return new PageImpl<>(limit.fetchResults().getResults(), pageable, limit.fetchCount());}

控制臺打印

select count(distinct projectinf0_.project_id) as col_0_0_ from pis_project projectinf0_left outer join pis_group groupinfo1_ on (projectinf0_.project_id = groupinfo1_.project_id)left outer join pis_contract contractin2_ on (projectinf0_.contract_id = contractin2_.contract_id);select projectinf0_.project_id as col_0_0_,projectinf0_.status_ as col_1_0_,projectinf0_.name_ as col_2_0_,projectinf0_.type_ as col_3_0_,contractin2_.contract_code as col_4_0_,group_concat(groupinfo1_.name_) as col_5_0_,contractin2_.contract_name as col_6_0_,contractin2_.sign_status as col_7_0_,contractin2_.contract_money as col_8_0_,contractin2_.estimate_money as col_9_0_ from pis_project projectinf0_left outer join pis_group groupinfo1_ on (projectinf0_.project_id = groupinfo1_.project_id)left outer join pis_contract contractin2_ on (projectinf0_.contract_id = contractin2_.contract_id) group by projectinf0_.project_id order by projectinf0_.project_id asc limit ?;

總結

以上是生活随笔為你收集整理的queryDsl引入Mysql内置函数示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。