SpringBoot + Spring data JPA使用方言(自定义函数、一些自带函数)
本人之前一直用mybitis,现在项目上使用jpa,给我带来了极大的方便,但也遇到一些问题。下列需求是这样的,我要根据id in 筛选出符合条件的数据,并将其中的某个字段,拼接起来返回。用原生sql比较简单,使用GROUP_CONCAT 函数即可。
SELECT GROUP_CONCAT(`name`) `names` FROM `face_machine` WHERE id in (1,2,3);
但使用jpa(非原生sql,因为很多地方都用到了,且使用原生sql,数据处理起来比较麻烦) 就会有问题了,我项目中jpa底层是使用的hibernate,所以要研究出如何使用hql语句来使用GROUP_CONCAT函数。
首先,dao层方法是这样的
@Query(value = "select GROUP_CONCAT(fm.name) as names from FaceMachine fm where id in (?1)")String findNamesByIds(List<Integer> list);
这样直接使用是不行的,因为GROUP_CONCAT不是常用的函数。需要配置方言了。
要自定义一个MySQLDialect类
package com.ymkj.property.dialect;import org.hibernate.dialect.MySQLDialect;
import org.hibernate.dialect.function.StandardSQLFunction;/*** @author zhengyue* @data 2019-08-06 11:16*/
public class MyMysqlDialect extends MySQLDialect{public MyMysqlDialect() {super();registerFunction("GROUP_CONCAT", new StandardSQLFunction("GROUP_CONCAT"));}
}
然后需要在配置文件中添加配置,我的配置文件是xml
spring:
# jap自动创建表及打印sqljpa:hibernate:ddl-auto: updateshow-sql: trueproperties:hibernate:dialect: com.ymkj.property.dialect.MyMysqlDialectdatabase: mysql
主要是spring.properties.hibernate.dialect=com.ymkj.property.dialect.MyMysqlDialect (自定义的类)
//-------------------------------------------------------遇到以下问题------------------------------------------------------------------------------------//
刚开始按上述操作,启动并无问题,但若有需要新创建的表,就会出现问题,会报错,表也不会被创建出来。查了很多,都说是因为方言问题。确实是方言问题。下面附上解决方法:
package com.ymkj.property.dialect;import org.hibernate.dialect.MySQLDialect;
import org.hibernate.dialect.function.StandardSQLFunction;/*** @author zhengyue* @data 2019-08-06 11:16*/
public class MyMysqlDialect extends MySQLDialect {public MyMysqlDialect() {super();registerFunction("GROUP_CONCAT", new StandardSQLFunction("GROUP_CONCAT"));}
//此处是解决创建表报错问题@Overridepublic String getTableTypeString() {return " ENGINE=InnoDB DEFAULT CHARSET=utf8";}
}
SpringBoot + Spring data JPA使用方言(自定义函数、一些自带函数)相关推荐
- 基于SpringBoot+ Spring Data Jpa的后台管理系统【源码开源】
昨天朋友找我喝酒,说30岁了,比较焦虑,钱没赚到,整天被媳妇数落. 其实现在我们看到的不一定就事真实的情况,就算从高斯分布看,平平淡淡的人生才是大部分人的轨迹.当然抖音.知乎上的不能比,人均收入百万, ...
- SpringBoot集成Spring Data JPA多数据源(二)
目录 1.引入依赖 2.application.yml配置文件 3.AtomikosJtaPlatform 4.事务管理器JPAAtomikosTransactionConfig 5.主数据源配置 6 ...
- Spring Data JPA 教程(翻译)
写那些数据挖掘之类的博文 写的比较累了,现在翻译一下关于spring data jpa的文章,觉得轻松多了. 翻译正文: 你有木有注意到,使用Java持久化的API的数据访问代码包含了很多不必要的模式 ...
- Spring Boot中使用Spring Data JPA示例
JPA是Java Persistence API的简称,是sun公司早期推出的Java持久层规范,目前实现JPA规范的主流框架有Hibernate.OpenJPA等.Hibernate框架是当前较为流 ...
- 【SpringBoot框架篇】11.Spring Data Jpa实战
文章目录 1.简介 1.1.JPA 1.2.Spring Data Jpa 1.3.Hibernate 1.4.Jpa.Spring Data Jpa.Hibernate三者之间的关系 2.引入依赖 ...
- SpringBoot 实战 (八) | 使用 Spring Data JPA 访问 Mysql 数据库
微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 如题,今天介绍 Spring Data JPA 的使用. 什么是 Spring Data JPA 在介绍 Spri ...
- SpringBoot学习笔记:Spring Data Jpa的使用
更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...
- spring-boot (三) spring data jpa
学习文章来自:http://www.ityouknow.com/spring-boot.html spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence ...
- springboot jpa sql打印_SpringBoot集成Spring Data JPA以及读写分离
相关代码:github OSCchina JPA是什么 JPA(Java Persistence API)是Sun官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具 来管理 ...
最新文章
- ECShop显示某商品销售累计
- 数据结构-二叉树的遍历
- 【HDU - 5914 】Triangle (打表 或 set维护)
- 面试题,产品经理岗位的哪些特点最吸引你?
- 【转载】Maven pom文件详解
- python输入的字符串转换为对应的数字类型_Psychopy | 第1期:数据类型及运算符
- 如何高效和快乐的学习RS和GIS知识
- LINUX设置终端窗口显示内容的滚动缓冲行数
- 学习C语言,有哪些值得推荐的经典书籍?
- 《Windows游戏编程大师技巧》(第二版)
- 【control】模型预测控制(MPC)
- java基本数据类型存放在哪?
- 【C语言】蓝桥杯/ACM竞赛入门 A+B for Input-Output Practice
- 手把手简单制作一个 Java 木马程序
- java 级数_编写一个Java程序实现级数运算。
- JAVA+MySQL 图书馆借阅信息管理系统
- 计算机基础知识文件的复制移动,如何复制文件
- 【从0开始学web】89-150 php特性
- 名额有限| 和喜马拉雅、网易严选、大搜车...学运营,是超级用户运营!
- VLC web插件 js接口
热门文章
- if 下与 或执行与否
- 计算机博后 国外招聘,全额奖学金机会,香港理工计算机系博后/博士/研究助理招收中...
- paper_summary
- 在一台服务器安装多个MySQL数据库实例
- 基于阈值的全零块判决算法
- 暗夜临近,DApp江湖上演现实版狼人杀
- android switch 空间,android Android UI(Switch)详解
- jQuery 关键字搜索(自动完成效果,autocomplete)
- CS224d lecture 14札记
- 对话雪球创始人方三文:「打工人」如何选行业、找工作、挑老板?|创新大会 2021...