您的位置:首页 > 其它

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

2014-04-29 15:55 211 查看
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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: