Web层
//表现层通用实现
public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {
protected PageBean pageBean = new PageBean();
//创建离线提交查询对象
DetachedCriteria detachedCriteria = null;
public void setPage(int page) {
pageBean.setCurrentPage(page);
}
public void setRows(int rows) {
pageBean.setPageSize(rows);
}
//将指定java对象转为json,并响应到客户端页面
public void java2Json(Object o,String[] excludes){
JsonConfig jsonConfig = new JsonConfig();
//指定哪些属性不需要转json
jsonConfig.setExcludes(excludes);
String json = JSONObject.fromObject(o,jsonConfig).toString();
ServletActionContext.getResponse().setContentType("text/json;charset=UTF-8");
try {
ServletActionContext.getResponse().getWriter().print(json);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//将指定java对象转为json,并响应到客户端页面
public void java2Json(List o,String[] excludes){
JsonConfig jsonConfig = new JsonConfig();
//指定哪些属性不需要转json
jsonConfig.setExcludes(excludes);
String json = JSONArray.fromObject(o,jsonConfig).toString();
ServletActionContext.getResponse().setContentType("text/json;charset=UTF-8");
try {
ServletActionContext.getResponse().getWriter().print(json);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static final String HOME = "home";
public static final String LIST = "list";
//模型对象
protected T model;
public T getModel() {
return model;
}
//在构造方法中动态获取实体类型,通过反射创建model对象
public BaseAction() {
ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();
//获得BaseAction上声明的泛型数组
Type[] actualTypeArguments = genericSuperclass.getActualTypeArguments();
Class<T> entityClass = (Class<T>) actualTypeArguments[0];
detachedCriteria = DetachedCriteria.forClass(entityClass);
pageBean.setDetachedCriteria(detachedCriteria);
try {
model = entityClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
Dao层
重点
1.获得父类泛型的类型
2.将sessionFactory注入dao,给HibernateDaoSupport调用,生成HibernateTemplate
//持久层通用实现
public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> {
//代表某个实体的类型
private Class<T> entityClass;
@Resource//根据类型注入spring工厂中的sessionFactory对象
public void setMySessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}
//在父类BaseDaoImpl的构造方法中动态获得entityClass
public BaseDaoImpl() {
ParameterizedType superclass = (ParameterizedType) this.getClass().getGenericSuperclass();
//获得父类上声明的泛型数组
Type[] actualTypeArguments = superclass.getActualTypeArguments();
entityClass = (Class<T>) actualTypeArguments[0];
}
public void save(T entity) {
this.getHibernateTemplate().save(entity);
}
public void delete(T entity) {
this.getHibernateTemplate().delete(entity);
}
public void update(T entity) {
this.getHibernateTemplate().update(entity);
}
public T findById(Serializable id) {
return this.getHibernateTemplate().get(entityClass, id);
}
public List<T> findAll() {
String hql = "FROM " + entityClass.getSimpleName();
return (List<T>) this.getHibernateTemplate().find(hql);
}
}