ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询

ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询

1.demo简介

这是一个由ExtJs4.2,Mysql5.5 ,Struts2,Hibernate3.3构成的简单web项目,本人由于最近在研究ExtJs所以特意做了这个Demo,方便有需要的同学查看,也给自己留下学习笔记吧。需要特别说明我这里并没有整合Struts,Hibernate,这两个工具是独立运行的。转载请注明:http://blog.csdn.net/qiuzhping/article/details/41739017

1.1 项目目录结构:

1.2 struts.xml配置文件内容

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<include file="struts-default.xml" />
    <package name="json" namespace="/" extends="json-default">
    	<action name="JobData" class="com.qiuzhping.report.action.GetJobDataAction">
    		<result type="json" />
    	</action>
    </package>
</struts>

1.3 hibernate.cfg.xml配置文件内容

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

	<session-factory>
		<property name="dialect">
			org.hibernate.dialect.MySQLDialect
		</property>
		<property name="connection.url">
			jdbc:mysql://localhost:3306/devDB
		</property>
		<property name="connection.username">root</property>
		<property name="connection.password">1234</property>
		<property name="connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		<property name="myeclipse.connection.profile">
			mysqlConn
		</property>
		<mapping resource="com/qiuzhping/report/domian/Job.hbm.xml" />
		<mapping resource="com/qiuzhping/report/domian/Sex.hbm.xml" />
		<mapping
			resource="com/qiuzhping/report/domian/Department.hbm.xml" />

	</session-factory>

</hibernate-configuration>

1.4 web.xml配置文件内容

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
	  <welcome-file-list>
	    <welcome-file>index.jsp</welcome-file>
	  </welcome-file-list>
</web-app>

2.核心代码展示

2.1 Mysql 分页查询语句

public List<Job> getData(int start,int end,Class clazz){
		Session session = hsf.getSessionFactory().openSession();
		StringBuffer sql = new StringBuffer("SELECT * FROM job LIMIT "+start+","+end);
		SQLQuery query =session.createSQLQuery(sql.toString());
		query.addEntity(clazz);
		return query.list();
	}

2.2 统计总体数量查询语句

public BigDecimal getTotalCount(Class clazz){
		Session session = hsf.getSessionFactory().openSession();
		StringBuffer sql = new StringBuffer("SELECT * FROM job ");
		SQLQuery query =session.createSQLQuery(sql.toString());
		query.addEntity(clazz);
		return new BigDecimal(query.list().size());
	}

2.3 jobenquiry.js内容

var itemsPerPage = 20;
var params;
var store = Ext.create('Ext.data.Store',{
		fields:["id","firstName","lastName","loginName","telephone","brithday","sexId","depId"],
		proxy:{
			type:'ajax',
			url:'/demo/JobData.action',
			reader:{
				type:'json',
				root:'rootData',
				totalProperty: 'totalCount'
			}
		},
		pageSize: itemsPerPage,
		autoLoad:true
});
Ext.onReady(function(){
	Ext.Loader.setConfig({
		enabled:true
	});
	Ext.create('Ext.grid.Panel',{
		title:'Job Enquiry',
		width:'100%',
		layout:"auto",
		style:"margin-left:auto;margin-right:auto;",
		renderTo:Ext.getBody(),
		columns:[{
				header:'Id',
				flex: 1,align:"center",
				dataIndex:'id',
				sortable:true
			},{
				header : "First Name",
				flex: 1, align:"center",
                dataIndex : 'firstName',
                sortable : true
			}, {
                header : "Last Name",
                flex: 1,  align:"center",
                dataIndex : 'lastName',
                sortable : true
            }, {
                header : "Login Name",
                flex: 1,
				align:"center",
                dataIndex : 'loginName',
                sortable : true
            }, {
                header : "Telephone",
                flex: 1,align:"center",
                hideable: false,
                dataIndex : 'telephone',
                sortable : true
            }, {
                header : "brithday",
                flex: 1, align:"center",
                dataIndex : 'brithday',
                sortable : true
            }, {
                header : "Sex Id",
                flex: 1, align:"center",
                dataIndex : 'sexId',
                sortable : true
            }, {
                header : "Dep Id",
                flex: 1,  align:"center",
                dataIndex : 'depId',
                sortable : true
            }],
		store:store,
		//style:"margin-left:auto;margin-right:auto;align:center",
		pageSize: itemsPerPage,
		dockedItems: [{
	        xtype: 'pagingtoolbar',
	        store: store,
	        dock: 'bottom',
	        displayInfo: true
	    }]
	});
	store.load({params:{start:0,limit:itemsPerPage}});
	var startTime;
	var endTime;
	function checkDate(){
		startTime = Ext.getCmp("startTime");
		endTime = Ext.getCmp("endTime");
		if(startTime != null && endTime != null && startTime.getValue() > endTime.getValue()){
			alert("Start time must be smaller than the end time!");
			return false;
		}
		return true;
	}
	function query(){
		//check date
		if(!checkDate()){
			return ;
		}
		params = {
			'conEnquiryTicketVo.startTime':startTime.getValue(),
			'conEnquiryTicketVo.endTime':endTime.getValue(),
			start:0,
			limit:itemsPerPage
		};
//		store.on('beforeload',function(){
//			var startTime = Ext.getCmp("startTime");
//			var endTime = Ext.getCmp("endTime");
//			//alert("click!!"+startTime.getValue());
//			params = {
//				'conEnquiryTicketVo.startTime':startTime.getValue(),
//				'conEnquiryTicketVo.endTime':endTime.getValue(),
//				start:0,
//				limit:itemsPerPage
//			};
//		});
		store.load({params:params});
	}
});

2.4 GetJobDataAction内容

package com.qiuzhping.report.action;

import java.math.BigDecimal;
import java.util.List;

import org.apache.log4j.Logger;

import com.opensymphony.xwork2.ActionSupport;
import com.qiuzhping.report.dao.impl.DepartmentDaoImpl;
import com.qiuzhping.report.domian.Job;

/**
 * <Description functions in a word>
 * <Detail description>
 *
 * @author  Qiuzhenping
 * @version  [Version NO, 2014-12-5]
 * @see  [Related classes/methods]
 * @since  [product/module version]
 */
public class GetJobDataAction extends ActionSupport{
	/**
	 *serialVersionUID
	 */
	private static final long serialVersionUID = 3288957476157165689L;
	private Logger log = Logger.getLogger(this.getClass());
	private BigDecimal totalCount;
	private List rootData;
	private int start;
	private int limit;

	public BigDecimal getTotalCount() {
		return totalCount;
	}
	public void setTotalCount(BigDecimal totalCount) {
		this.totalCount = totalCount;
	}
	public List getRootData() {
		return rootData;
	}
	public void setRootData(List rootData) {
		this.rootData = rootData;
	}

	public int getStart() {
		return start;
	}
	public void setStart(int start) {
		this.start = start;
	}
	public int getLimit() {
		return limit;
	}
	public void setLimit(int limit) {
		this.limit = limit;
	}

	@Override
	public String execute(){
		try {
			DepartmentDaoImpl ddi = new DepartmentDaoImpl();
			log.info("start = "+start);
			log.info("limit = "+limit);
			int end = start+limit;
			log.info("end = "+end);
			totalCount = ddi.getTotalCount(Job.class);
			rootData  = ddi.getData(start, limit,Job.class);
		} catch (Exception e) {
			log.error(e);
		}
		return SUCCESS;
	}
}

3.效果图

4.源代码(除开Ext库,libs文件)

ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询

1.libs目录缺少hibernate核心jar包

2.libs目录缺少struts jar

3.WebRoot目录缺少ExtJs4.2核心类库

以上信息我都在项目里面注明了,因为这些内容的文件太大了,CSDN不允许上传,而且也很容易找到,只要按照我在项目内提示的内容去增加这些依赖文件这个项目就能  正常运行。

ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询 : http://download.csdn.net/detail/qiu_11/8226457

时间: 2024-10-26 23:31:01

ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询的相关文章

转Oracle、MySql、SQLServer 数据分页查询

最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表的查询语句,也可以是多表的联合查询语句 * firstIndex:其实的索引 * pageSize:每页显示的记录数 */ select o.* from (sql) o limit firstIndex,pageSize

Oracle、MySql、SQLServer 数据分页查询

Oracle.MySql.SQLServer 数据分页查询 摘自:http://www.cnblogs.com/wangyong/p/3396333.html 近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表的查询语句,也可以是多表的联合查询语句 * firstIndex:

Oracle、MySql、SQLServer数据分页查询

看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: SELECT DISTINCT TOP 500 rr.ID AS id ,rr.strName AS name ,rr.nType AS res_type ,rr.nRegID AS region_id ,rr.strChanName AS channel_name ,rr.nChanNum AS channel ,rr.nSortID AS so

Mysql与Oracle的分页查询比较

MySql分页查询语句 下列查询语句中m代表行数的索引默认从0开始类似于pl/sql中的游标0表示从第一条开始n表示向后查询多少条数据. 例如: select * from emp limit 2,3表示查询第三条数据到第六条数据(包前不包后)也就是第三条数据包括第三条数据不包括第六条数据 也就是 3, 4,5条记录 select * from buss_stu_info limit m,n; Oracle数据库分页查询 一层分页查询: 及时数据量足够大几乎也不会受到影响查询速率足够快,一般在写

基于Mysql数据库的SSM分页查询

前言: Hello,本Y又来了,"分页"在我们使用软件的过程中是一个很常见的场景,比如博客园对于每个博主的博客都进行了分页展示.可以简单清晰的展示数据,防止一下子将过多的数据展现给用户,毕竟用户的阅读能力和短期接受力都有限,使用分页可以避免带给用户浏览上的不舒服感,利用它可以带给用户良好的体验,便于浏览和查询数据.那么本期我们的博客就来探讨关于分页,使用的Java的框架是Spring+Springmvc+mybatis,这也是目前企业非常流行的搭配方式,使用的数据库是Mysql,我们将

MySQL大数据量分页查询方法及其优化

方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺点: 全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从结果集的M位置处取出N条输出,其余抛弃. 方法2: 建立主键或唯一索引, 利用索引(假设每页10条) 语句样式: MySQL中,可用如下方法: SELECT * FRO

MYSQL结果排序、分页查询、聚合函数

结果排序 使用ORDER BY子句将查询记录进行排序, ASC : 升序,缺省. DESC : 降序. ORDER BY 子句出现在SELECT语句的最后. 格式: SELECT <selectList> FROM table_name WHERE 条件 ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC]...; ------------------------------------------------------- 按单列排序: 需求:选择id,货品名称,分类

mysql 1对多--分页查询

自己记录一下 select p.*,f.* from (select a.id,a.createtime from photo a order BY a.createtime DESC limit 0,10) p INNER join file f on f.photo_id= p.id  order by p.createtime DESC 注意内部嵌套的那个select 实现的 应该是 查询主表的 十条数据

【知了堂学习笔记】JSP页面数据分页实现(一)——分页概念以及主流数据库的分页查询

一.分页简介 1.分页,就是一种将数据库里的数据一部分展示给用户的技术.为什么要这样做呢?因为一般来说用户在查询时数据是非常多的,当一个页面不能显示所有数据时,我们就要对查询的数据进行分页,就像我们的书本分成一页一页一样.最简单的例子就是百度,当你百度时,成千上万的数据,并不是呈现在一个页面的. 2.分页的实现方式 1)假分页(不推荐):什么是假分页呢?假分页就是一次性将数据库里的数据全部取出来,存储在页面中,然后再将数据分别展示出来.这种假分页在数据少的还可以玩玩,当数据多起来的时候,这种方式