ssh中的BaseDao与BaseAction

来源:互联网 发布:劳丽诗的淘宝店咋样 编辑:程序博客网 时间:2024/05/22 06:23

一、BaseAction

public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {protected PageBean pageBean = new PageBean();protected DetachedCriteria criteria ;public void setRows(Integer rows) {pageBean.setPageSize(rows);}public void setPage(Integer page) {pageBean.setCurrentPage(page);}public static final String HOME = "home";public static final String LIST = "list";protected T model;@Overridepublic T getModel() {return model;}//通过构造函数动态获取实体类型,然后通过反射创建model的实例@SuppressWarnings("all")public BaseAction() {//获取整个BaseAction<T> 参数化类型ParameterizedType superclass = (ParameterizedType) this.getClass().getGenericSuperclass();//获取BaseAction上面的泛型数组,即实际参数类型Class<T> entityClass = (Class<T>) superclass.getActualTypeArguments()[0];criteria = DetachedCriteria.forClass(entityClass);pageBean.setDetachedCriteria(criteria);try {model = entityClass.newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}/** * 将传入的object转换成json格式返回到客户端,并且剔除掉不需要转换的json串 * @param obj * @param excludes */protected void object2JsonToClient(Object obj, String[] excludes) {ServletActionContext.getResponse().setContentType("text/json;charset=utf-8");//对转换的json进行配置JsonConfig config = new JsonConfig();//剔除不需要转换的属性keyconfig.setExcludes(excludes);try {ServletActionContext.getResponse().getWriter().write(JSONObject.fromObject(obj,config).toString());} catch (IOException e) {e.printStackTrace();}}/** * 将传入的list转换成json格式返回到客户端,并且剔除掉不需要转换的json串 * @param obj * @param excludes */protected void object2JsonToClient(List obj, String[] excludes) {ServletActionContext.getResponse().setContentType("text/json;charset=utf-8");//对转换的json进行配置JsonConfig config = new JsonConfig();//剔除不需要转换的属性keyconfig.setExcludes(excludes);try {ServletActionContext.getResponse().getWriter().write(JSONArray.fromObject(obj,config).toString());} catch (IOException e) {e.printStackTrace();}}}
其中有些内容是不需要的,因为使用了easyui的分页,所以需要将页面属性驱动参数review到baseAction中,并将转换json提出成方法放入BaseAction中。

二、IBaseDao接口

public interface IBaseDao<T> {    void save (T entity);void update (T entity);void delete (T entity);T findById (Serializable id);List<T> findAll();List<T> findByMyCriteria(DetachedCriteriadetachedCriteria);void executeUpdate(String queryString, Object... objects);        void pageQuery(PageBean pageBean); }

三、BaseDaoImpl实现IBaseDao接口

public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> {//代表的是某个实体的类型private Class<T> entityClass;//为HibernateDaoSupport中注入sessionFactory@Resource //根据类型注入spring工厂中的会话工厂对象sessionFactorypublic void setMySessionFactory(SessionFactory sessionFactory){super.setSessionFactory(sessionFactory);}//在父类(BaseDaoImpl)的构造方法中动态获取entityClass@SuppressWarnings("all")public BaseDaoImpl() {ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();entityClass = (Class<T>) genericSuperclass.getActualTypeArguments()[0];}@Overridepublic void save(T entity) {this.getHibernateTemplate().save(entity);}@Overridepublic void update(T entity) {this.getHibernateTemplate().update(entity);}@Overridepublic void delete(T entity) {this.getHibernateTemplate().delete(entity);}@Overridepublic T findById(Serializable id) {return this.getHibernateTemplate().get(entityClass, id);}@Overridepublic List<T> findAll() {String sql = "from " + entityClass.getSimpleName();return (List<T>) this.getHibernateTemplate().find(sql);}/** * 执行跟新语句的通用方法 */@Overridepublic void executeUpdate(String queryString, Object... objects) {//获取当前用户的sessionSession session = this.getSessionFactory().getCurrentSession();//通过session创建在hibernate映射文件中定义好名字的hql语句的query对象Query query = session.getNamedQuery(queryString);//Query query = session.createQuery(queryString);//计数器int i = 0;for (Object object : objects) {//为hql语句中的问号赋值query.setParameter(i++, object);}query.executeUpdate();}/** * 分页查询的通用方法 */@Overridepublic void pageQuery(PageBean pageBean) {int currentPage = pageBean.getCurrentPage();int pageSize = pageBean.getPageSize();DetachedCriteria detachedCreiteria = pageBean.getDetachedCriteria();//查询total(总记录数)detachedCreiteria.setProjection(Projections.rowCount());//改变hibernate发出的sql形式 --》 select count(*) from bc_staffList<Long> countList = (List<Long>) this.getHibernateTemplate().findByCriteria(detachedCreiteria);int total = countList.get(0).intValue();pageBean.setTotal(total);//查询rows(分页的记录)detachedCreiteria.setProjection(null); //改变hibernate发送的sql语句形式--》select * from bc_staff//指定hibernate框架封装对象的方式detachedCreiteria.setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY);int firstResult = (currentPage - 1) * pageSize;int maxResults = pageSize;List rows = this.getHibernateTemplate().findByCriteria(detachedCreiteria, firstResult, maxResults);pageBean.setRows(rows);}/** * 根据传入进来的离线查询对象进行查询 */@Overridepublic List<T> findByMyCriteria(DetachedCriteria detachedCriteria) {return (List<T>) this.getHibernateTemplate().findByCriteria(detachedCriteria);}}

因为项目需要,将某些BaseDao中本没有的内容review到BaseDao中,使用时删除部分即可。

原创粉丝点击