日期:2014-05-19  浏览次数:20793 次

这样的J2EE SSH框架结构如何大家伙评评

先看一下结构图(点击下图看大图)

?

?说明:

红色部门是DAO

蓝色部门是SERVICE

绿色部门是ACTION(或是Spring的Controller)

?

DAO部分说明

BaseDao是基类,所有的DAO都继承此BaseDao,BaseDao继承了HibernateDaoSupport,用HibernateTemplate实现了一些基础的方法(插删改查),以下是代码

package com.thd.dao;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.thd.bean.Page;
import com.thd.util.MyBeanUtils;

public class BaseDao extends HibernateDaoSupport {
	/**
	 * @description 保存对象
	 * @param obj 保存的对象
	 */
	public void save(Object obj) {
		this.getHibernateTemplate().save(obj);
	};
	
	/**
	 * @description 更新对象
	 * @param obj 更新的对象
	 */
	public void update(Object obj) {
		this.getHibernateTemplate().update(obj);
	}
	
	/**
	 * @description 根据参数对象更新数据库对象
	 * @param original 根据此对象不为空的属性更新数据库中的对象
	 * @param id 需要更新对象的id
	 * @param nullProperties 需要设置为空的属性
	 * @throws Exception
	 */
	public void update(Object original,Serializable id,String[] nullProperties) throws Exception{
		Object dest = this.findById(original.getClass(), id);
		MyBeanUtils.copyNotNullProperties(dest, original);
		MyBeanUtils.setObjNullProperties(dest, nullProperties);
		this.getHibernateTemplate().update(dest);
	}
	
	/**
	 * @description 删除对象
	 * @param obj 删除的对象 对象要有主键
	 */
	public void delete(Object obj) {
		this.getHibernateTemplate().delete(obj);
	}
	
	/**
	 * @description 根据id删除对象
	 * @param c 删除的对象类型
	 * @param id 删除的对象的主键
	 */
	public void delete(Class c,Serializable id){
		Object obj = findById(c,id);
		this.delete(obj);
	}
	
	/**
	 * @description 保存或更新对象
	 * @param obj 保存或更新的对象 有主键则是更新 没有主键则是保存
	 */
	public void saveOrUpdate(Object obj){
		this.getHibernateTemplate().saveOrUpdate(obj);
	}
	
	/**
	 * @description 根据id查找对象
	 * @param c 对象的类
	 * @param id 对象的id
	 * @return 
	 */
	@SuppressWarnings("unchecked")
	public Object findById(Class c,Serializable id){
		return this.getHibernateTemplate().get(c, id);
	}
	
	
	/**
	 * @description hql基础查询
	 * @param hql hql查询语句
	 * @param params 条件的值,对应hql中的"?"
	 * @param currPage 当前页
	 * @param pageSIze 每页显示条目数量
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<Object> findByHql(final String hql,final Object[] params,final int currPage,final int pageSize) {
		return this.getHibernateTemplate().executeFind(new HibernateCallback() {
			public Object doInHibernate(Session session) {
				Query query = session.createQuery(hql);
				if(params!=null && params.length>0){
					for(int i = 0 , j = params.length ; i < j ; i++){
						query.setParameter(i,params[i]);
					}
				}
				if (currPage >= 1 && pageSize >= 1) {
					query.setFirstResult((currPage - 1) * pageSize);
					query.setMaxResults(pageSize);
				}
				return query.list();
			}
		});
	}
	
	
	/**
	 * @description 无参数的hql全部记录查询
	 * @param hql hql语句
	 * @return
	 */
	public List findByHql(String hql){
		return findByHql(hql,null,0,0);
	}
	
	/**
	 * @description 带有参数的hql全部记录查询
	 * @param hql hql语句
	 * @param params  条件的值,对应hql中的"?"
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<Object> findByHql(final String hql,final Object[] params) {
		return findByHql(hql,params,0,0);
	}
	
	/**
	 * @description 不带参数的hql分页查询
	 * @param hql hql语句
	 * @param currPage 当前页
	 * @param pageSize 每页显示条目数量
	 * @return
	 */
	public List<Object> findByHql(String hql,int currPage,int pageSize) {
		return findByHql(hql,null,currPage,pageSize);
	}
	
	
	/**
	 * @description sql基础查询