EasyUI+SpringMVC+Hibernate 日期区间查询统计

图书借阅管理系统,统计书籍借阅情况,可查询历史借阅排行和分类排行,默认返回前30名。查询时用sql

jsp,这里用到了easyui-datebox,用formatter和parser对日期格式进行转换,转换成YYYY-MM-DD 的格式,后台直接是String接受

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.yang.bishe.entity.User"%>
<%@ page import="com.yang.bishe.entity.Book"%>
<!DOCTYPE html>
<html>
<head>
	<%@ include file="/common/base.jsp"%>
	<script type="text/javascript">
		//分类排行
		function doSearch(){
			if($('#bookTypeId').combobox('getValue')==''){
				$.messager.alert({
					title: 'Error',
					msg: '请先选择书类型'
				});
			}else{
				$('#dg').datagrid({
	                url: 'borrowInfo/statistics',
	                queryParams:{bookTypeId: $('#bookTypeId').combobox('getValue'),startDate:$('#start').datebox('getValue'),endDate:$('#end').datebox('getValue')}
	        	});
			}
		}
		//总排行
		function doSearchOverall(){
			$('#dg').datagrid({
                url: 'borrowInfo/statistics',
                queryParams:{overall:'overall',startDate:$('#start').datebox('getValue'),endDate:$('#end').datebox('getValue')}
        	});
		}
		//日期区间设置格式
		function mydateformatter(date){
				var y = date.getFullYear();
				var m = date.getMonth()+1;
				var d = date.getDate();
				return y+'-'+(m<10?('0'+m):m)+'-'+(d<10?('0'+d):d);
			}
		function mydateparser(s){
			if (!s) return new Date();
			var ss = (s.split('-'));
			var y = parseInt(ss[0],10);
			var m = parseInt(ss[1],10);
			var d = parseInt(ss[2],10);
			if (!isNaN(y) && !isNaN(m) && !isNaN(d)){
				return new Date(y,m-1,d);
			} else {
				return new Date();
			}
		}
	</script>
</head>
<body class="easyui-layout" data-options="fit:true,border:false">
	<table id="dg" title="借阅排行" class="easyui-datagrid" style="width:100%;height:100%;"
			toolbar="#toolbar" pagination="false"
			rownumbers="true" fitColumns="true" singleSelect="true">
		<thead>
			<tr>
				<th field="borrowNum" width="60">借阅次数</th>
				<th field="bookName" width="60">书名</th>
				<th field="author" width="55">作者</th>
				<th field="iSBN" width="45">ISNB</th>
				<th field="publisher" width="60">出版社</th>
				<th field="publishYear" width="60">出版年</th>
				<th field="CallNumber" width="50">索书号</th>
			</tr>
		</thead>
	</table>
	<div id="toolbar" style="height:70px;">
		<div>
			<table>
				<tr>
					<td>    类别排行:</td>
					<td>    书类别:</td>
					<td><select id="bookTypeId" class="easyui-combobox" data-options="required:true,editable:false,valueField:'bookTypeId',textField:'bookTypeName',url:'bookType/getBookType',panelHeight:'auto'" style="width:180px;"></select></td>
					<td><a href="javascript:void(0);" class="easyui-linkbutton" iconCls="icon-search"  onclick="doSearch()">Search</a></td>
				</tr>
				<tr>
					<td>    总排行:</td>
					<td>    <a href="javascript:void(0);" class="easyui-linkbutton" iconCls="icon-search"  onclick="doSearchOverall()">查询</a></td>
					<td>    查询日期区间(可选)</td>
				 	<td><input id="start" class="easyui-datebox" data-options="formatter:mydateformatter,parser:mydateparser,editable:false"></input>——</td>
				 	<td><input id="end" class="easyui-datebox" data-options="formatter:mydateformatter,parser:mydateparser,editable:false"></input></td>
					<td><a href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'ext-icon-zoom_out',plain:true" onclick="$('#start').datebox('setValue','');$('#end').datebox('setValue','');$('#dg').datagrid('load',{});">重置过滤</a></td>
				</tr>
			</table>
		</div>
	</div>
</body>
</html>

controller;

/**
	 * 统计,分类统计和总排行
	 * @param request
	 * @param response
	 * @throws Exception
	 */
	@RequestMapping("/statistics")
	  public void statistics(HttpServletRequest request,
				HttpServletResponse response) throws Exception {
		String bookTypeId=request.getParameter("bookTypeId");
		String overall=request.getParameter("overall");
		String startDate=request.getParameter("startDate");//service再判断是否有没有选择了日期区间吧
		String endDate=request.getParameter("endDate");
		List<Book>books=null;
		if(overall!=null){
			books=borrowInfoService.getOverall(startDate,endDate);
		}
		if(bookTypeId!=null){
			books=borrowInfoService.getBookTypeOverall(bookTypeId,startDate,endDate);
		}
		writeJson(books,response);
	}

serviceImpl(接口就省略了):

这里要注意判断是否选择了日期区间,我日期区间的判断还不完善,应该要判断endDate>startDate的,这判断可以放在前台判断。

还要注意sql语句中日期区间

+" where BorrowDate"
+" between '"+startDate+"' and '"+endDate
+"' group by temp.BookId "

这里面日期是要用单引号

数据库是mysql,子查询重命名时,不能重命名属性,如下面的

as temp

不能弄成as temp(,,)这种重命名的方式,要获取temp的属性,只能是temp.BorrowInfoId (BorrowInfoId是子查询select返回的字段名)这样,即temp的字段是要和select返回的字段名字一样。

@Override
	public List<Book> getOverall(String startDate,String endDate) {
		List<Book> books=new ArrayList();
		String sql=null;
		//注意这的的判断条件,是空字符串而不是null
		if(startDate!=""&&endDate!=""){
			sql="select  temp.BookId as BookId,count(BookId) as borrowNum"
					+" from (select b.BorrowInfoId,b.BooksBarCode,sn.BookId,b.BorrowDate from t_borrowinfo as b "
					+" left join t_booksn as sn on b.BooksBarCode=sn.BooksBarCode) "
					+" as temp "
					+" where BorrowDate"
					+" between '"+startDate+"' and '"+endDate
					+"' group by temp.BookId "
					+" order by borrowNum desc "
					+" limit 30";
			}else{
					sql="select  temp.BookId as BookId,count(BookId) as borrowNum"
									+" from (select b.BorrowInfoId, b.BooksBarCode, sn.BookId from t_borrowinfo as b "
									+" left join t_booksn as sn on b.BooksBarCode=sn.BooksBarCode) "
									+" as temp "
									+" group by temp.BookId "
									+" order by borrowNum desc "
									+" limit 30";
			}
		 List<Map> map=borrowInfoDao.findBySql(sql);
		 for(int i=0;i<map.size();i++){
			 Book book=new Book();
			 book=bookDao.getById(Book.class,(Integer)map.get(i).get("BookId"));
			 book.setBorrowNum(Integer.parseInt(map.get(i).get("borrowNum").toString()));
			 books.add(book);
		 }
		return books;
	}

	@Override
	public List<Book> getBookTypeOverall(String bookTypeId,String startDate,String endDate) {
		List<Book> books=new ArrayList();
		String sql=null;
		//注意这的的判断条件,是空字符串而不是null
		if(startDate!=""&&endDate!=""){
			sql="select temp.BookId,count(temp.BookId) as borrowNum"
					+" from (select b.BorrowDate,b.BooksBarCode,sn.BookId from t_borrowinfo as b"
					+" left join t_booksn as sn on b.BooksBarCode=sn.BooksBarCode)"
					+" as temp"
					+" left join t_book as book on book.BookId=temp.BookId"
					+" where book.BookTypeId="+bookTypeId
					+" and BorrowDate between '"+startDate+"' and '"+endDate
					+"' group by book.BookId"
					+" order by borrowNum desc"
					+" limit 30";
		}else{
			sql="select temp.BookId,count(temp.BookId) as borrowNum"
					+" from (select b.BooksBarCode,sn.BookId from t_borrowinfo as b"
					+" left join t_booksn as sn on b.BooksBarCode=sn.BooksBarCode)"
					+" as temp"
					+" left join t_book as book on book.BookId=temp.BookId"
					+" where book.BookTypeId="+bookTypeId
					+" group by book.BookId"
					+" order by borrowNum desc"
					+" limit 30";
		}
				List<Map> map=borrowInfoDao.findBySql(sql);
				for(int i=0;i<map.size();i++){
					 Book book=new Book();
					 book=bookDao.getById(Book.class,(Integer)map.get(i).get("BookId"));
					 book.setBorrowNum(Integer.parseInt(map.get(i).get("borrowNum").toString()));
					 books.add(book);
				}
				return books;
	}

Dao:因为用了Hibernate,但是用HQL的话有点乏力。。。所以用sql语句查询,利用Hibernate的借口creatSQLQuery,返回的是List<Map>,接受这里数据看上面serviceImpl代码

	@SuppressWarnings("unchecked")
	@Override
	public List<Map> findBySql(String sql) {
		SQLQuery q = getCurrentSession().createSQLQuery(sql);
		return q.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
	}

效果图:

时间: 2024-11-05 20:41:10

EasyUI+SpringMVC+Hibernate 日期区间查询统计的相关文章

SpringMVC+hibernate框架整合源码SSH Dubbo,ZooKeeper

获取[下载地址]   QQ: 313596790   [免费支持更新]A 代码生成器(开发利器);全部是源码     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势C 安全权限框架shiro ;  Shiro 是一个用

springMVC+Hibernate配置

本文描述下 sypro 项目中使用 springMVC+Hibernate配置,初学SpringMVC做下简单整理解. 1.web项目首先我们要使用 web.xml文件将 spring配置引入进来 Xml代码   <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee&q

Easyui+springMVC传值

高校整体架构采用的是springMVC+hibernate+easyui+mysql; 这个项目前台框架使用的是easyui,初次使用这个框架还是觉得挺好上手的,有中文的官网而且还有很多已经做好的demo作为参照,基本上我们在项目开发中常用的控件在官网上都能够找到.除此之外还提供了帮助文档,可以在官网上面下载.帮助文档就具体的给出了每一种控件的方法,事件已经用法,还给出了一些简单的小例子,基本上都很简单. EasyUI demo中文官网地址:http://www.jeasyui.net/demo

EasyUI + SpringMVC 解决静态资源访问

我们的项目用的是EasyUI+SpringMVC+EJB+JPA,分享一下项目中遇到的一些问题及其解决方法.前台用的EasyUI,页面中引入了easyUI的js与css(引入路径正确),但是无论如何都显示不出来,如下图: EasyUI的样式没有,看控制台:警告,找不到 21:26:25,643 WARN [org.springframework.web.servlet.PageNotFound](http-localhost/127.0.0.1:8080-1) No mapping found

Maven搭建SpringMVC+Hibernate项目详解

前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hibernate4.3.8,之前也打了好多SpringMVC的,这部分已经非常的熟悉了,毕竟业开发过一年多SpringMVC的,这次持久层采用Hibernate,数据源采用c3p0,数据库暂采用MySQL,主要是想复习一下Hibernate.搭建Spring

Maven搭建SpringMVC+Hibernate项目详解 【转】

前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hibernate4.3.8,之前也打了好多SpringMVC的,这部分已经非常的熟悉了,毕竟业开发过一年多SpringMVC的,这次持久层采用Hibernate,数据源采用c3p0,数据库暂采用MySQL,主要是想复习一下Hibernate.搭建Spring

Maven搭建SpringMVC+Hibernate项目详解(转)

前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hibernate4.3.8,之前也打了好多SpringMVC的,这部分已经非常的熟悉了,毕竟业开发过一年多SpringMVC的,这次持久层采用Hibernate,数据源采用c3p0,数据库暂采用MySQL,主要是想复习一下Hibernate.搭建Spring

spring+springmvc+hibernate架构、maven分模块开发例子小项目案例

maven分模块开发例子小项目案例 spring+springmvc+hibernate架构 以用户管理做测试,分dao,sevices,web层,分模块开发测试!因时间关系,只测查询成功,其他的准备在ext上做个完整的案例来的,可惜最近时间很紧, 高级部分也没做测试,比如建私服,其他常用插件测试之类的,等用时间了我做个完整ext前端和maven 完整的例子出来,在分享吧! 不过目前这些撑握了,在项目中做开发是没有问题的,其他高级部分是架构师所做的. 之前我有的资源都加上了积分,有些博友向我要,

SpringMVC hibernate加入多数据源 (SSHE/SYPRO加入多数据源为例)

SpringMVC hibernate加入多数据源 (以类SSHE/SYPRO加入多数据源为例作说明) 注:适用与SpringMVC + Hibernate的项目,其他框架的只能说作参考用 配置Spring 新建一个Spring的数据源配置文件,如spring-hibernate-aite.xml 怎么新建文件就不说了 新建的Spring的数据源配置文件的内容: 内容可以先将原有的spring-hibernate.xml完全copy过来,然后做相应修改 A.dataSource的相应修改 <!-