怎样在hibernate的HQL语句中使用mysql 的自定义函数?
问题:怎样在hibernate中使用mysql的函数?
1.hibernate支持原生态的sql语句查询,使用session.createSQLQuery()创建查询对象;
2.怎样在hql中使用mysql函数呢?
这时就需要重新定义hibernate的方言(dialect),将你需要用到的进行注册;
这里提到一个方言(dialect)的概念:
Hibernate底层依然使用SQL语句来执行数据库操作,虽然所有关系型数据库都支持使用标准SQL语句,但所有数据库都对标准SQL进行了一些扩展,所以在语法细节上存在一些差异,因此Hibernate需要根据数据库来识别这些差异。而方言(dialect)就是用来区分hibernate对应哪种数据库
通常在使用Spring整合hibernate的时候,会有这样一段配置
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=none
hibernate.format_sql=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.release_mode=auto
hibernate.connection.isolation=1
hibernate.connection.autocommit=false
hibernate.cache.use_query_cache=false
hibernate.cache.use_second_level_cache=false
hibernate.jdbc.batch_size=25
hibernate.jdbc.fetch_size=50
</value>
其中红色的配置语句就是指明使用mysql方言,对于其他不同的数据库都有对应不同的方言,详情点击这里。
首先创建一个mysql函数,我们命名为my_change_local(number bigint)
--这里是使用navicat工具创建的函数
BEGIN
DECLARE stemp varchar(255);
set stemp='';
select sms.LabelId into stemp from sysmain.message sms where sms.id=number;
RETURN stemp;
END
1.重写方言类,注册函数
public class MyLocalDialect extends MySQL5InnoDBDialect {
public MyLocalDialect() {
super();
registerFunction("my_change_local",new SQLFunctionTemplate(StandardBasicTypes.STRING,"my_change_local(?1)"));
}
}
2.修改配置文件,将数据库方言指向自己定义的方言类
将 hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 改为 hibernate.dialect=xxx.xxx.MyLocalDialect
3.之后就可以在hql中使用自己定义的函数了
怎样在hibernate的HQL语句中使用mysql 的自定义函数?的更多相关文章
- Hibernate的HQL语句中定位参数和具名参数传参
HQL查询: 1.有关hql查询语句中的问号参数形式,如果出现有多个问号,这对后面设置参数就比较麻烦. 如:from User user where user.name=? and user.age= ...
- HQL语句中数据类型转换,及hibernate中createQuery执行hql报错
一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...
- Hibernate的hql语句save,update方法不执行
Hibernate的hql语句save,update方法不执行 可能出现的原因问题: 未进行事务管理 需要进行xml事务配置或者注解方式的事务配置
- 如何在sqlite3连接中创建并调用自定义函数
#!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sql ...
- Hibernate框架HQL语句
这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...
- Hibernate写hql语句与不写hql语句的区别?
写hql语句与不写hql语句的区别? 写hql语句:书写HQL语句,所有的查询与投影的设计均使用HQL语句完成. 不写hql语句:没有任何查询语句,所有的查询与投影的设计使用面向对象格式完成. 二者选 ...
- Hibernate 的HQL语句,初级
这里讲解简单的HQL语句,因为很多比较复杂的外查询,用一般的查询很难完成 所以这里需要使用HQL @Test public void selquery(){ System.out.printf(&qu ...
- hibernate 之 HQL语句总结【转】
1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query ...
- where语句中不能直接使用聚合函数
1.问题描述 select deptno ,avg(sal) from emp where count(*)>3 group by deptno; 在where 句中使用聚合函数count(*) ...
随机推荐
- Yogurt factory
Description The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the ...
- PSP阶段和WBS
项目:PSP Daily 详情请见项目功能说明书 PSP2.1 Personal Software Process Stages 预估耗时长 Planning 计划 · Estimate · 开发 ...
- 第八次作业psp
psp 进度条 代码累积折线图 博文累积折线图 psp饼状图
- 线段树---成段更新hdu1698 Just a Hook
hdu1698 Just a Hook 题意:O(-1) 思路:O(-1) 线段树功能:update:成段替换 (由于只query一次总区间,所以可以直接输出1结点的信息) 题意:给一组棍子染色,不同 ...
- XCode 6.4 Alcatraz 安装的插件不可用
升级Xcode 6.4后插件都不可用了,解决办法: 1.在 Alcatraz中删除插件并退出Xcode: 2.重新打开Xcode 并安装: 3.退出Xcode: 4.进入Xcode,会提示如图,点击 ...
- RequestMappingHandlerMapping 详解
我们先理简单梳理一个关系 关系梳理 spring ioc 是spring的核心,用来管理spring bean的生命周期 MVC 是一种使用 MVC(Model View Controller 模型- ...
- webpack打包多html开发案例
简单说明: 1,案例没有使用devserver,所以不能实时查看 2,案例是将src下面的html.css.js分别进行处理 3,多html的规律是需要有多个entry,每个html一个entry,当 ...
- RPC和WebService的区别
最近分析的这个系统,逻辑架构中有一层是RPC interface.之前对RPC不熟悉,就上网搜索了一下资料,在此总结一下: RPC是Remote Procedure Calling,远程过程调用的缩写 ...
- TDDL实践
使用入门-数据源配置 数据源配置,tddl的入口,从datasource切入 <bean id="tddlDataSource" class="com.taobao ...
- 使用cookie保存用户登录信息
写入Cookie HttpCookie _cookie = new HttpCookie("User"); _cookie.Values.Add("UserName&qu ...