问题:怎样在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 的自定义函数?的更多相关文章

  1. Hibernate的HQL语句中定位参数和具名参数传参

    HQL查询: 1.有关hql查询语句中的问号参数形式,如果出现有多个问号,这对后面设置参数就比较麻烦. 如:from User user where user.name=? and user.age= ...

  2. HQL语句中数据类型转换,及hibernate中createQuery执行hql报错

    一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...

  3. Hibernate的hql语句save,update方法不执行

    Hibernate的hql语句save,update方法不执行 可能出现的原因问题: 未进行事务管理 需要进行xml事务配置或者注解方式的事务配置

  4. 如何在sqlite3连接中创建并调用自定义函数

    #!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sql ...

  5. Hibernate框架HQL语句

    这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...

  6. Hibernate写hql语句与不写hql语句的区别?

    写hql语句与不写hql语句的区别? 写hql语句:书写HQL语句,所有的查询与投影的设计均使用HQL语句完成. 不写hql语句:没有任何查询语句,所有的查询与投影的设计使用面向对象格式完成. 二者选 ...

  7. Hibernate 的HQL语句,初级

    这里讲解简单的HQL语句,因为很多比较复杂的外查询,用一般的查询很难完成 所以这里需要使用HQL @Test public void selquery(){ System.out.printf(&qu ...

  8. hibernate 之 HQL语句总结【转】

    1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query ...

  9. where语句中不能直接使用聚合函数

    1.问题描述 select deptno ,avg(sal) from emp where count(*)>3 group by deptno; 在where 句中使用聚合函数count(*) ...

随机推荐

  1. Yogurt factory

    Description The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the ...

  2. PSP阶段和WBS

    项目:PSP Daily 详情请见项目功能说明书 PSP2.1 Personal Software Process Stages 预估耗时长 Planning 计划   · Estimate · 开发 ...

  3. 第八次作业psp

    psp 进度条 代码累积折线图 博文累积折线图 psp饼状图

  4. 线段树---成段更新hdu1698 Just a Hook

    hdu1698 Just a Hook 题意:O(-1) 思路:O(-1) 线段树功能:update:成段替换 (由于只query一次总区间,所以可以直接输出1结点的信息) 题意:给一组棍子染色,不同 ...

  5. XCode 6.4 Alcatraz 安装的插件不可用

    升级Xcode 6.4后插件都不可用了,解决办法: 1.在 Alcatraz中删除插件并退出Xcode: 2.重新打开Xcode 并安装: 3.退出Xcode: 4.进入Xcode,会提示如图,点击 ...

  6. RequestMappingHandlerMapping 详解

    我们先理简单梳理一个关系 关系梳理 spring ioc 是spring的核心,用来管理spring bean的生命周期 MVC 是一种使用 MVC(Model View Controller 模型- ...

  7. webpack打包多html开发案例

    简单说明: 1,案例没有使用devserver,所以不能实时查看 2,案例是将src下面的html.css.js分别进行处理 3,多html的规律是需要有多个entry,每个html一个entry,当 ...

  8. RPC和WebService的区别

    最近分析的这个系统,逻辑架构中有一层是RPC interface.之前对RPC不熟悉,就上网搜索了一下资料,在此总结一下: RPC是Remote Procedure Calling,远程过程调用的缩写 ...

  9. TDDL实践

    使用入门-数据源配置 数据源配置,tddl的入口,从datasource切入 <bean id="tddlDataSource" class="com.taobao ...

  10. 使用cookie保存用户登录信息

    写入Cookie HttpCookie _cookie = new HttpCookie("User"); _cookie.Values.Add("UserName&qu ...