`
haijun.xu
  • 浏览: 7278 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate中的时间函数

阅读更多

转载 Hibernate中的时间函数

 

 为了表示偶最近没有偷懒,我决定把我前两天写的DAO层的时间函数贴出来一下。

我们现在的框架是JSF+Spring+Hibernate.
 
//过去12个月每个月删除的人数

public List delCustomerLastTwelveMonth() {

  List a = (List) new java.util.ArrayList();
  Calendar c = Calendar.getInstance();
  for (int i = 0; i < 12; i++) {
   c.add(Calendar.MONTH, 0);
   Date after = c.getTime();
   c.add(Calendar.MONTH, -1);
   Date before = c.getTime();
   int number = doSomethingAboutDDate(before, after);

   //调用函数doSomethingAboutDDate
   a.add(number);
  }
  return a;
 }

//实现一个月删除的用户数,调用此函数后可以用循环实现12个月

 private int doSomethingAboutDDate(Date startdate, Date enddate) {
  DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  String hql = " from TbDelCustomer u where" + " u.DDelDate > '"
    + dateFormat.format(startdate) + "' and u.DDelDate <  '"
    + dateFormat.format(enddate) + "' ";
  List users = this.getHibernateTemplate().find(hql);
  return users.size();
 }

 

 

//过去12个月每月新增的人数

 public List newCustomerLastTwelveMonth() {
  List a = (List) new java.util.ArrayList();
  Calendar c = Calendar.getInstance();
  for (int i = 0; i < 12; i++) {
   c.add(Calendar.MONTH, 0);
   Date after = c.getTime();
   c.add(Calendar.MONTH, -1);
   Date before = c.getTime();
   int number = doSomethingAboutADate(before, after);
   a.add(number);
  }
  return a;
 }

 

//此函数能统计出每个月增加的用户数,同样可以调用后用循环实现12个每个月新增人数

private int doSomethingAboutADate(Date startdate, Date enddate) {
  DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  String hql = " from TbCustomer u where" + " u.DCreateDate > '"
    + dateFormat.format(startdate) + "' and u.DCreateDate <  '"
    + dateFormat.format(enddate) + "' ";
  List users = this.getHibernateTemplate().find(hql);
  return users.size();

 }

//查询订单成功数目小于successfulOrder而生成订单数大于totalOrder的注册用户

 public List searchCustomerByOrder(int successfulOrder, int totalOrder) {
  // TODO Auto-generated method stub
  String hql = "select l.ICustomerId ,l.CMobileNum,l.CCustomerName,u.IOrderCount," +
    "u.IOrderOkCount from TbCustomerOrderLog u,TbCustomer l where u.ICustomerId=l.ICustomerId and u.IOrderCount>"
    + totalOrder + "  and u.IOrderOkCount<" + successfulOrder;


  Session session = (Session) getHibernateTemplate().getSessionFactory()
    .openSession();
  Query q = session.createQuery(hql);
  List list = q.list();

  return list;
 }

 

//根据电话号码查询Customer的所有信息

 public List searchCustomerByTelNumber(final String telNumber, final int startRow,final int pageSize) {
  // TODO Auto-generated method stub
  try {
   return (List) getHibernateTemplate().execute(
     new HibernateCallback() {
      public Object doInHibernate(Session session)
        throws HibernateException {
       String k = "'%" + telNumber + "%'";
       String hql = " from TbCustomer u where u.CMobileNum like "+k;
       List queriedResult = session.createQuery(hql)
         .setFirstResult(startRow).setMaxResults(
           pageSize).list();
       Hibernate.initialize(queriedResult);
       return queriedResult;
      }
     });
  } catch (RuntimeException re) {

   throw re;
  }
 }
 //按电话号码查询,相匹配的总数。此函数总要是为JSF层的分页做准备
 public int getCustomerRowCount(final String telNumber)
 {
  // TODO Auto-generated method stub
  String k = "'%" + telNumber + "%'";
  String hql="select count(*) from TbCustomer u where u.CMobileNum like "+k;
  return (Integer)this.getHibernateTemplate().find(hql).get(0);
 }

 

//给定月份内没有任何订单的用户。比如,传参是3,表示的就是距现在三个月内没有任何订单用户,返回用户的姓名和电话号码,封装成List.

 public List searchNoOrderCustomer(int certainMouth) {
  Date date1 = aboutFindDate(certainMouth);
  DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  String hql = "select l.CMobileNum ,l.CCustomerName from TbCustomerOrderLog u ,TbCustomer l where u.ICustomerId=l.ICustomerId and u.DLastOkOrderDate< '"
    + dateFormat.format(date1) + "' ";
  Session session = (Session) getHibernateTemplate().getSessionFactory()
    .openSession();
  Query q = session.createQuery(hql);
  List list = q.list();

  return list;

 }

}
//这个函数主要是给上个函数(给定月份没有订单的用户),此函数能将时间返回到我们所需要的点。假设我们输入3,而我们的现在的时间点2007年08月01日,通过这个函数,我们就能得到时间是2007年05月01日。

 private Date aboutFindDate(int cerMouth) {
  Date b = null;
  Calendar c = Calendar.getInstance();
  for (int i = 0; i < cerMouth; i++) {
   c.add(Calendar.MONTH, -1);
   b = c.getTime();

  }
  return b;
 }

 

 

个人感觉DAO层不应该涉及到统计,只是当初师兄是这么定义的,我也就这么实现了,其实觉得一些东西可以放到Service层来做的。因为我在做Service的时候,发现很多东西我在DAO层实现,在Service层就不需要做,很快写完代码。

 但是这样做的话Hibenate的好处好像就没有充分显出来。

分享到:
评论

相关推荐

    Hibernate 函数 ,子查询 和原生SQL查询

    3. **日期时间函数**:如`current_date()`, `current_time()`, `current_timestamp()`,获取当前日期、时间或日期时间,还有`date()`, `time()`, `timestamp()`等用于提取日期、时间部分。 4. **转换函数**:`cast...

    NHibernate hql 可用函数,函数大全

    时间日期函数** - **Current_Date, Current_Time, Current_Timestamp**: 获取当前日期、时间戳。 - **示例**: `SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, t.id FROM Topic t` **6. 分组与统计函数...

    Hibernate知识点总结

    **对象的持久化**:指将程序中的对象状态存储到持久存储设备(如磁盘)上,以便在后续的时间点可以恢复这些对象的状态。在Hibernate中,对象持久化的具体含义包括以下几个方面: - **保存**:将对象状态存储到数据库...

    Hibernate3.6

    5. **Query 改进**:HQL 和 Criteria 查询支持更多的函数和操作符,如日期、时间函数、集合操作等,使得查询表达力更加强大。 6. **性能优化**:3.6 版本对缓存机制进行了优化,支持更高效的二级缓存策略,同时优化...

    hibernate多表联合查询

    - 使用`SUM()`函数来计算每个顾客在指定时间段内的消费总额。 - `GROUP BY`子句按顾客ID分组结果集。 #### 五、Native SQL实现多表联合查询 有时候,我们可能需要执行一些更复杂的SQL查询,这时可以使用Hibernate的...

    hibernate api

    以下是关于Hibernate API在Hibernate 3.0版本中的关键知识点的详细解释: 1. **SessionFactory**: 这是Hibernate的核心接口之一,它负责创建Session对象。SessionFactory是线程安全的,通常在应用启动时创建并缓存...

    hibernate里面常用jar包

    7. **commons-collections-x.x.jar** 和 **commons-lang3-x.x.jar**:Apache Commons Collections提供了丰富的集合操作工具,而Commons Lang提供了各种实用的字符串处理、日期时间操作等函数,它们在Hibernate中起到...

    hibernate视频

    - **异步处理**:使用异步任务队列处理长时间运行的任务。 - **批处理**:一次性处理大量数据,提高效率。 综上所述,“邹波hibernate50讲”视频教程覆盖了Hibernate框架的基础知识、实体类设计、对象-关系映射、...

    Hibernate中文参考文档

    - **1.3.3 使关联工作**:解释如何确保关联关系在 Hibernate 中正确运行。 - **1.3.4 值类型的集合**:讲解如何处理 Java 类中的集合属性。 - **1.3.5 双向关联**:介绍双向关联的概念和实现方法。 - **1.3.6 使...

    hibernate5.3 jar包

    在这个“hibernate5.3 jar包”中,我们找到了Hibernate 5.3.0 Final的稳定版本,这个版本在社区中经过广泛测试,被认为是一个可靠的选择。 首先,让我们深入了解Hibernate ORM的核心功能。Hibernate提供了一个API,...

    hibernate实体映射文件字段设置默认值

    在Hibernate框架中,实体映射文件(通常为`.hbm.xml`)用于定义Java对象与数据库表之间的映射关系。这其中包括了属性到数据库表列的映射、主键生成策略、以及一些高级特性如延迟加载等。在某些情况下,我们可能希望...

    Hibernate Tools

    在Hibernate中,实体类代表数据库中的表,它们通过注解或XML映射文件与数据库进行关联。Hibernate Tools可以分析数据库结构,自动生成对应的实体类,包括属性(fields)、getter/setter方法、构造函数等。这样,...

    hibernate_code_generator.rar

    为了解决这一问题,"hibernate_code_generator.rar"提供了自动化代码生成工具,帮助开发者节省时间,提高开发效率。 首先,我们来了解什么是Hibernate Code Generator。这是一款基于Hibernate的代码生成器,能够...

    Hibernate 缓存 实例

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它极大地简化了数据库操作。为了提高性能,Hibernate引入了缓存机制,分为一级缓存和二级缓存。本篇文章将深入探讨Hibernate缓存,并通过实例演示...

    Hibernate 中文文档

    Hibernate 是一款开源的对象关系映射(ORM)框架,它允许开发人员将 Java 对象映射到数据库表中的记录,反之亦然,从而简化了数据持久化层的开发工作。在 ORM 的帮助下,开发人员可以使用面向对象的编程语言特性来...

    jdk 1.8 springmvc+hibernate+springData jpa基本框架.rar

    Java 8引入了许多新特性,比如Lambda表达式、函数式接口、Stream API和日期时间API等。这些特性可以提高代码的简洁性和可读性,特别是在处理集合和并发时。 **Maven** Maven是一个项目管理和综合工具,它管理项目的...

    hibernate连接mssql server需要的jar包

    在Java开发中,Hibernate是一个非常流行的ORM(Object-Relational Mapping)框架,它简化了与关系数据库的交互。当使用Hibernate连接Microsoft SQL Server数据库时,需要特定的驱动支持。标题提到的"hibernate连接...

    HQL(Hibernate Query Language):

    HQL还提供了更高级的功能,如命名参数、集合操作(IN, NOT IN)、日期和时间函数、空值处理等。这些特性使得开发者能够在不直接接触底层SQL的情况下,高效地进行数据操作。 在实际应用中,HQL通过Hibernate的...

    hibernate3.2+cglib2.2架包

    10. **类型转换**:在数据库和Java对象之间进行类型转换是Hibernate的重要部分,例如日期和时间的处理。 总之,这个压缩包提供的Hibernate 3.2和修复后的CGlib 2.2是为了解决可能的运行时冲突,并提供了一个完整的...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     11.1.2 Java时间和日期类型的Hibernate映射类型  11.1.3 Java大对象类型的Hibernate映射类型  11.1.4 JDK自带的个别Java类的Hibernate映射类型  11.1.5 使用Hibernate内置映射类型  11.2 客户化映射类型  ...

Global site tag (gtag.js) - Google Analytics