SSH开发中公共接口和实现类

1、dao层公共接口与实现

package com.ytmr.dao.base;

import java.io.Serializable;
import java.util.Collection;

public interface CommonDao<T> {
	//根据id删除一个对象
	public void deleteEntry(Serializable id);
	//添加一个对象
	public void saveEntry(T t);
	//更新一个对象
	public void updateEntry(T t);
	//保存或更新一个对象
	public void saveOrUpdate(T t);
	//根据id查询出持久化类中的某一对象
	public T getEntryById(Serializable id);
	//查询所有数据
	public Collection<T> findAllEntry();
	//根据多个id查询出一个集合对象
	public Collection<T> findAllEntryByIds(Serializable[] ids);

}

package com.ytmr.dao.base.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.metadata.ClassMetadata;
import org.springframework.orm.hibernate3.HibernateTemplate;

import com.ytmr.dao.base.CommonDao;

public class CommonDaoImpl<T> implements CommonDao<T> {

	@SuppressWarnings("rawtypes")
	private Class clazz;

	@SuppressWarnings("rawtypes")
	public CommonDaoImpl() {
		/**
		 * 1、得到泛型
		 * (1)this:谁调用了该构造函数this就代表谁
		 * (2)假如UserDaoImpl extends CommonDaoImpl<User>
		 * (3)UserDaoImpl将会交给 spring来创建对象,但spring没有办法给泛型创建对象,
		 *     所以不能再UserDaoImpl创建对象 时传递参数,所以只能通过第二步的方式把参数
		 *     传递进去。
		 *  (4)this代表CommonDaoImpl的子类
		 *  (5)getGenericSuperclass得到的是this的父类CommonDaoImpl
		 *  (6)this.getClass().getGenericSuperclass()得到的是class
		 */
		ParameterizedType type = (ParameterizedType) this.getClass()
				.getGenericSuperclass();
		/**
		 * 2、返回表示此类型实际参数类型的Type对象数组,getActualTypeArguments
		 *    获得实际参数类型
		 */
		Type[] param = type.getActualTypeArguments();
		/**
		 * 3、得到T的Class形式
		 */
		this.clazz = (Class) param[0];
	}
    
	//有spring的配置文件將其引入到spring的容器中
	public HibernateTemplate hibernateTemplate;// 需要导入spring的jar包

	public HibernateTemplate getHibernateTemplate() {
		return hibernateTemplate;
	}

	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}

	// 根据id删除一个对象
	@SuppressWarnings("unchecked")
	@Override
	public void deleteEntry(Serializable id) {
		T t = (T) this.getHibernateTemplate().get(this.clazz, id);
		this.getHibernateTemplate().delete(t);

	}

	// 保存一个对象
	@Override
	public void saveEntry(T t) {
		this.getHibernateTemplate().save(t);
	}

	// 更新一个对象
	@Override
	public void updateEntry(T t) {
		this.getHibernateTemplate().update(t);

	}

	// 保存或更新一个对象
	@Override
	public void saveOrUpdate(T t) {
		this.getHibernateTemplate().saveOrUpdate(t);
	}

	// 根据id得到某一个对象
	@SuppressWarnings("unchecked")
	@Override
	public T getEntryById(Serializable id) {
		return (T) this.getHibernateTemplate().get(this.clazz, id);
	}

	// 查询所有的对象
	@SuppressWarnings("unchecked")
	@Override
	public Collection<T> findAllEntry() {
		return this.getHibernateTemplate().find("from" + this.clazz.getName());
	}

	// 根据多个id查询出一个集合对象
	@SuppressWarnings("unchecked")
	@Override
	public Collection<T> findAllEntryByIds(Serializable[] ids) {
		//调用下面的方法,將数组转化成字符串
		String condition = ArrayToString(ids);
		//ClassMetadata持久化类的原数组,需要导入hibernate的jar包
		ClassMetadata metadata = this.getHibernateTemplate()
				.getSessionFactory().getClassMetadata(this.clazz);
		//getIdentifierPropertyName 标示符的名称,getEntityName持久化类的名称,getPropertyNames一般属性名字
		List<T> list = this.getHibernateTemplate().find(
				"from " + this.clazz.getName() + " where "
						+ metadata.getIdentifierPropertyName() + " in("
						+ condition + ")");
		//将list集合转换成set集合返回
		return new HashSet<T>(list);
	}
	
  //將数组转化成字符串
	private String ArrayToString(Serializable[] ids) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < ids.length; i++) {
			//目的去除最后一个字符是逗号
			if (i == ids.length - 1) {
				sb.append(i);
			} else {
				sb.append(i).append(",");
			}
		}
		return sb.toString();
	}

}

2、action层

package com.ytmr.web.action.base;

import java.lang.reflect.ParameterizedType;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

@SuppressWarnings("serial")
public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {

	private T t;
	@SuppressWarnings("rawtypes")
	private Class clazz;

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public BaseAction() {
		// 得到泛型
		ParameterizedType type = (ParameterizedType) this.getClass()
				.getGenericSuperclass();
		// 得到参数类型
		this.clazz = (Class) type.getActualTypeArguments()[0];
		// 给实参具体类型创建对象
		try {
			this.t = (T) this.clazz.newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public T getModel() {
		return t;
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值