hibernate QBC日期查询

使用QBC方式查询数据库,如果查询条件包含日期,则比较难以处理,尤其是在不是简单的在某个日期之前,或在某个日期之后的情况时,不能用hibernate常用方式,要用原生sql语句执行查询。

1、hibernate常用方式

方法                          说明   
    Restrictions.eq           =  
    Restrictions.allEq        利用Map来进行多个等于的限制   
    Restrictions.gt           >   
    Restrictions.ge           >=   
    Restrictions.lt            < 
    Restrictions.le            <=   
    Restrictions.between  BETWEEN  
    Restrictions.like         LIKE  
    Restrictions.in            in  
    Restrictions.and         and  
    Restrictions.or           or

使用以上格式进行日期的简单比较,举例:

Criteria crit = session.createCriteria(TpPcdaily.class);

crit.add(Restrictions.eq("ppRepdate", nowdate));

其中TpPcdaily为数据库表对应在程序中的持久化类,ppRepdate为持久化类日期类型字段,nowdate为日期参数,要求必须为日期类型。

2、原生sql语句

Restrictions.sqlRestriction     用SQL限定查询

使用原生sql语句可以大大扩展QBC方式,举例:

Criteria crit = session.createCriteria(TpPcdaily.class);

crit.add(Restrictions.sqlRestriction("datediff(month, {alias}.PM_REPDATE, ‘"+onedate+"‘)=0"));

其中TpPcdaily为数据库表对应在程序中的持久化类,由于使用原生sql语句,故要使用数据库中的字段,PM_REPDATE为数据库表日期类型字段,onedate为日期参数,要求必须为String类型。{alias}表示将被替换成查询实体的列别名,通过观察后台运行,发现后台执行的语句为this_ where datediff(month, this_.PM_REPDATE, ‘2014-12-01‘)=0,可见在执行过程不完全是我们写的sql语句,而是对字段或其他一下词语进行修饰,比如在前增加类似this_的修饰,{alias}被替换成this_。

时间: 2024-10-06 13:54:45

hibernate QBC日期查询的相关文章

Hibernate QBC组合查询例子

Criteria criteria = session.createCriteria(Employee.class); //1. AND: 使用Conjunction表示 //Conjunction 本身就是一个Criterion对象 //且其中还可以添加Criterion对象 Conjunction conjunction = Restrictions.conjunction(); conjunction.add(Restrictions.like("name", "a&q

hibernate—QBC

QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口.我们看下面的示例程序: Criteria criteria=session.createCriteria(User.class);   criteria.add(Expression.eq("name","zx"));   criteria.add(Expression.eq("age

Hibernate(九)HQL查询

一.Hibernate提供的查询方式 OID查询方式:主键查询.通过get()或者load()方法加载指定OID的对象查询结果为一个 HQL查询方式:通过Query接口使用HQL语言进行查询 QBC查询方式:通过Criteria等接口和类进行是查询 本地SQL查询方式:使用原生的SQL语言进行查询 对象导航查询方式:通过已经加载的对象,导航到其关联对象 其中HQL和QBC是Hibernater提供的专业的查询方式 HQL查询方式为官方推荐的标准查询方式 二.HQL查询简述 HQL:Hiberna

【Hibernate】Hibernate的聚类查询、分组查询、排序与时间之差

在Hibernate中的HQL语句其实能够基本能够实现SQL语句所做的事情,正如jQuery至于javascript一样.虽然HQL语句是对类的查询,但是HQL在实行聚类查询.分组查询.排序与时间之差等查询,也无须把查询结果查询出来,再通过对List的处理才得到结果. 比如有一张如下的Testtable表: 要像<[Mysql]求出离最近相差X天的项,sql语句关于日期的比对>(点击打开链接)一样,查询date字段离现在具有30年的项有多少,SQL语句则这样写: select count(*)

JDBC操作Oracle,根据日期查询

方法一: 1 SimpleDateFormat dateformat=new SimpleDateFormat("yyyy-MM-dd"); 2 String today=dateformat.format(new Date()); 3 4 String delSql = "delete from ssd_pms_forecast_recode where forecasteNum = '"+forecastNum+"' and forecasteTime

hibernate框架之-查询结果集返回类型

Hibernate支持HQL和SQL的查询,返回结果支持POJO类型或字段/数组的形式. 开发中用Hibernate进行数据库查询,用的是SQL.原来需要查询一个表的几乎所有字段,所以我使用了addEntity方法,将查询结果转换为映射的对象.后来需求变更,需要查询另外几个表的若干字段,不想继续用addEntity绑定新加的表(毕竟只有几个字段需要查询出来,将多余的字段都转换成映射对象,或只将需查询的字段转换为映射对象,从维护角度来说似乎都不太好),网上查了查:于是在addEntity后再使用a

Hibernate六 HQL查询

HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条件查询,甚至使用原生的SQL查询语句.Hibernate还提供了一种数据过滤功能,这些都用于删选目标数据.2.查询步骤:(1)获取Hibernate Session对象(2)编写HQL语句(3)以HQL语句为参数,调用Session的createQuery()方法创建查询对象(4)如果HQL语句包含

hibernate中带查询条件的分页

所谓分页,从数据库中分,则是封装一个分页类.利用分页对象进行分页. 但,分页往往带查询条件. 分页类的三个重要数据:[当前页码数],[数据库中的总记录数],[每页显示的数据的条数] 原理:select * from  [表名] where   [字段名]  like   ['%条件%']    limit  [开始查询的索引],[每页显示的数据] 带查询条件的分页分两步 (1)第一步:查询出符合条件的数据的总条数 ---->select count(*) from [表名] where  [字段

使用hibernate原生sql查询,结果集全为1的问题解决

问题如下: String sqlTest ="select summary,summaryno from F_Summary"; List<Map<Object, Object>> listTest = this.getService().getListBySql(sqlTest); for (Map<Object, Object> m : listTest) { for (Object k : m.keySet()) { System.out.pr