Hibernate很大的一个特点就是屏蔽了数据库的差异,使用了hibernate就应该尽量HQL来操作数据库(除非不得不用数据库本身的一些特性),对于日期、时间类型的比较hibernate也提供很好的支持。
这里提供两种方式来处理HQL 日期、时间比较问题!
一、常用
用一个时间类型来替换参数end:query.setDate("end",endDate);
例:
java.sql.Date beginDate=java.sql.Date.valueOf("2006-6-1");
java.sql.Date endDate=java.sql.Date.valueOf("2006-6-2");
Stirng hql = "from table tb where tb.startdate <:endDate and tb.startdate >=:beginDate";
Query query = session.createQuery(hql);
query.setDate("beginDate",beginDate);
query.setDate("endDate",endDate);
java.sql.Date beginDate=java.sql.Date.valueOf("2006-6-1");
java.sql.Date endDate=java.sql.Date.valueOf("2006-6-2");
Stirng hql = "from table tb where tb.startdate <:endDate and tb.startdate >=:beginDate";
Query query = session.createQuery(hql);
query.setDate("beginDate",beginDate);
query.setDate("endDate",endDate);
二、优化
String hql = "from TradeRecord as tr where tr.TradeTime>= :startTime "
+ "and tr.TradeTime <= :endTime and tr.CustomerId =:cid";
String[] params = { "startTime", "endTime", "cid" };
Object[] args = { startTime, endTime, new Long(cid) };
List liste = this.getHibernateTemplate().findByNamedParam(hql, params, args);
String hql = "from TradeRecord as tr where tr.TradeTime>= :startTime "
+ "and tr.TradeTime <= :endTime and tr.CustomerId =:cid";
String[] params = { "startTime", "endTime", "cid" };
Object[] args = { startTime, endTime, new Long(cid) };
List liste = this.getHibernateTemplate().findByNamedParam(hql, params, args);
//startTime,endTime,cid是这个方法的参数
特别提醒:
当遇到查询从A(起始时期)到B(结束日期)的纪录时,
如果数据库中字段类型为timestamp,那么查询2008-10-10到2008-11-11的纪录时不会出现2008-10-10那一天的纪录,哪怕你的比较符号用的是>=和<=;因为数据库中的2008-10-10的纪录是这样的格式
2008-11-11 15:35:48:253,而query.setDate设置一个时间参数进去,他是用这个时间比较的
2008-11-44 00:00:00 000,所以因该用:
query.setTimeStamp("end",endDate);
如果从view层取到的date不包含后面的time信息,最好
endDate.setHours(23);
endDate.setMinutes(59);
endDate.setSeconds(59);
对开始时间
startDate.setHours(0)
startDate.setMinutes(0);
startDate.setSeconds(0);
这样就是查询 A-0:0:0 到 B-23:59:59时间段的数据
相关推荐
HQL语句 HQL语句 HQL语句 HQL语句 HQL语句
汇集了hql语句中大部分常用的函数 ABS(n) 取绝对值数学函数 数学函数 JPAQL HQL ABS(column_name[数字类型对象属性])
HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL...
hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全
HQL语句大全HQL语句大全HQL语句大全HQL语句大全HQL语句大全
Hql PPt Hql PPt
Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询...
不喜欢使用myEclipse的...最近在项目中使用Hibernate,由于需要使用HQL,找了很多资料,大都是MyEclipse中自带的HQL工具。 由于MyEclipse是收费的,速度不是很理想。所以在网上找到了一个elipse插件 英文图文教程 ...
hql模糊查询hql模糊查询hql模糊查询hql模糊查询
hql语句常规 方法 使用 了解hql语句
之前写好SQL,再到代码里面来写,语句复杂的看的时不时细节会忘记,用sql转换hql工具,直接贴近了就可以了;
hibernate查询之HQLhibernate查询之HQLhibernate查询之HQL
HQL是完全面向对象的查询语言,因此可以支持继承和多态等特征。HQL查询依赖于Query类,每个Query实例对应一个查询对象,使用HQL查询按 如下步骤进行: (1)获取Hibernate Session对象; (2)编写HQL语句; (3)以HQL...
精通HQL.doc精通HQL.doc精通HQL.doc精通HQL.doc精通HQL.doc
HQL语言大全HQL语言大全HQL语言大全
HQL查询语言基础,HQL查询语言基础,HQL查询语言基础
HQL查询语言基础.
Hql语句注意事项总结 1.在Hql中使用group by的问题 2.在count()中使用别名问题 3.关于Integer和Long的问题 4.关于参数是数组的问题
hibernate hql 语言大全 hql学习,这个文档是一个很全面,很不错的
hql多表查询hql多表查询hql多表查询