日期:2014-05-16  浏览次数:20688 次

Struts2.1.6+Spring2.5.6+Hibernate3.3.2+mysql整合+分页模板(2)

六、定义基本类

1)定义Action基本类-主要定义request,session等

?

BaseAction.java

package ssh.base;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

public class BaseAction extends ActionSupport implements RequestAware,SessionAware, ApplicationAware,ServletResponseAware{
	private static final long serialVersionUID = 4818541693118631758L;
	public Map<String, Object> request;	//一般少用,因为value stack里就是request
	public Map<String, Object> session;
	public Map<String, Object> application;//基本不用。可以放数据库或者放在一个CLASS里面
	public HttpServletResponse response;


//ServletActionContext.getRequest()同样也可以直接去的request

	public void setRequest(Map<String, Object> request) {
		this.request=request;
	}
	
	public void setSession(Map<String, Object> session) {
		this.session=session;
	}

	public void setApplication(Map<String, Object> application) {
		this.application=application;
	}

	public void setServletResponse(HttpServletResponse response) {
		this.response=response;
	}
}

??

?

2)定义接口DAO类,主要定义CURD,分页等基本相同的接口

?

DAO.java

package ssh.base;

import java.util.LinkedHashMap;
import ssh.utils.QueryResult;

public interface DAO {

	//保存数据
	public void save(Object entity);

	//更新数据
	public void update(Object entity);

	//删除单条记录
	public <T> void delete(Class<T> entityClass,Object entityId);	

	//删除多条记录
	public <T> void delete(Class<T> entityClass,Object[] entityIds);

	//查找指定ID的实体类数据
	public <T> T find(Class<T> entityClass,Object entityId);	//在方法上定义泛型需要在方法上写<X>,,第一个T是定义泛型,第2个T是返回类型
	
	/**
	 * 获得分页数据
	 * QueryResult<T> 泛型定义在类上。因为需要返回查询的数据List,和查询的总条数,所以需要自定义类型返回2个数据
	 * @param <T>	泛型
	 * @param entityClass 实体类
	 * @param firstIndex 开始索引
	 * @param maxResult 需要获取的记录数
	 * @param wherejpql where条件语句
	 * @param queryParams 条件语句参数
	 * @param orderby 排序,LinkedHashMap先进先出,使用这个是因为先进去的放到第一位,order by key1 desc,key2 asc	
	 * @return
	 */
	public <T> QueryResult<T> getScrollData(Class<T> entityClass,int firstIndex, int maxResult,	String wherejpql,Object[] queryParams,LinkedHashMap<String, String> orderby);
	
	public <T> QueryResult<T> getScrollData(Class<T> entityClass,int firstIndex, int maxResult,String wherejpql,Object[] queryParams);
	
	public <T> QueryResult<T> getScrollData(Class<T> entityClass,int firstIndex, int maxResult,LinkedHashMap<String, String> orderby);
	
	public <T> QueryResult<T> getScrollData(Class<T> entityClass,int firstIndex, int maxResult);
	
	public <T> QueryResult<T> getScrollData(Class<T> entityClass);
}

?

?

?3)定义实现DAO基本接口的DAOImpl的实现类,供其他实现类直接继承

??? 而且必须写@Component注入给Spring管理,然后注入hibernateTemplate,使用protected,其他类继承后可以直接使用

?

DaoSupport.java

package ssh.base;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.LinkedHashMap;
import java.util.List;
import javax.annotation.Resource;
import javax.persistence.Entity;
import ssh.utils.QueryResult;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Component;

//定义抽象类继承DAO,抽象出所有实体通用的方法,方便其他类继承就可以