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_。

   

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。