`
haijun.xu
  • 浏览: 7075 次
  • 性别: 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: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 客户化映射类型  ...

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

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

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

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

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

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

    Java进制/时间/日期/字符串/流算法大全

    Java 的16 进制与字符串的相互转换函数 JAVA 时间格式化处理 将毫秒转化为日期 文本的倒序输出 判断一个数字是奇数还是偶数 用Hibernate 实现分页 35 选7 彩票程序 获取GMT8 时间 中文乱码转换 Big5 字与Unicode 的...

    JSF+Spring+JPA(Hibernate实现)的环境搭建

    JSF+Spring+JPA以我个人看来,应该说是Struts2+Spring+...JSF可以采用事件监听机制,控件(JSF里面叫做控件)被触发了某些时间,直接优雅的和POJO进行了交互,配合ajax4jsf,处理大量的控件的事件是很简洁方便的。

    better-hibernate-with-scala:在scala中使用Hibernate的更好方法,而无需使用null,java-bean访问器或过多的样板

    该项目是从另一个开发中的项目中提取的。 我这样做是希望对像我这样的人有所帮助。 进行函数式编程时不会认为ORM消失的人。 我已经做了很多研究,以使基于我的scala项目的持久层正确无误。 我得出的结论是,ORM在...

    sleepjs:具有更好的时间函数和打字稿支持的异步睡眠

    默认函数Hibernate一段时间,以毫秒为单位。 但也可能需要不同的睡眠功能。 异步/等待 可以使用 async / await 等待睡眠定时器。 const { sleep } = require ( 'sleepjs' ) const myFunction = async ( ) =&gt; { ...

    java web技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和...

    java web开发技术大全

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和...

    java 算法

    JAVA时间格式化处理 ,将毫秒转化为日期, 文本的倒序输出 ,判断一个数字是奇数还是偶数 ,用Hibernate实现分页, 35选7彩票程序 ,获取GMT8时间, 中文乱码转换 ,小标签 ,Big5字与Unicode的互换, 取得服务器...

    go-clocksmith:睡眠感知sleep() 函数

    钟表匠 一个睡眠感知 sleep() 函数,如果系统进入Hibernate状态,它不会暂停(太长时间)。

    完全免费的Java/jsp开发编辑工具FirstJava2

    列表框中双击某一个函数名,代码编辑区将会自动输入"函数名()",如果这个函数有参数光标定位于 括号中,否则定位到括号外. 3.输入"this."时,会显示当前类和超类的所有相关函数和属性. 4.输入"new "时,会显示当前类...

    wiki-reindexer-lambda

    此函数本身不会进行任何爬网,因为由于已连接到API网关,因此它需要在30秒内返回,并且爬网可能需要更长的时间。run_crawler 该函数由push_hook函数调用。 首先,它Hibernate了几分钟,使Jekyll有机会为Wiki构建...

    FirstJava2完全教材

    列表框中双击某一个函数名,代码编辑区将会自动输入"函数名()",如果这个函数有参数光标定位于 括号中,否则定位到括号外. 3.输入"this."时,会显示当前类和超类的所有相关函数和属性. 4.输入"new "时,会显示当前类所有...

    Java经典实例(第2版)(达尔文).Ian F. Darwin著,关丽荣 张晓坤译-高清晰版

    处理数字、日期和时间。  3.使用集合、数组和其他类型实现数据的结构化。  4.面向对象技术和函数编程技术。  5.目录和文件系统运算符。  6.使用图形、视频和音频。  7.GUI开发,包括JavaFX和处理器。  8....

Global site tag (gtag.js) - Google Analytics