dao层List<T> 通过泛型实现公共方法 所有dao共用

来源:互联网 发布:贵州省公需科目大数据 编辑:程序博客网 时间:2024/05/14 08:24
建立common package,创建dao.BaseDaoSupport、service.CommonService、service.CmmonServiceImpl。其它模块service 继承CommonService。
1、BaseDaoSupport。

package com.zte.ace.common.dao;

import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;

import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.Restrictions;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class BaseDaoSupport extends HibernateDaoSupport { @SuppressWarnings({ "unchecked", "hiding" }) public <T> T getById(Class<T> t, Long id) {  return (T)this.getHibernateTemplate().get(t, id); } public long saveObj(Object obj) {  Object object = this.getHibernateTemplate().save(obj);  return Long.parseLong(object.toString()); } public void updateObj(Object obj){  this.getHibernateTemplate().update(obj); } public void deleteObj(Object obj){  this.getHibernateTemplate().delete(obj); } public <T> List<T> getObjListByParameter(Class<T> t,Map<String,Object> map) {  DetachedCriteria criteria = DetachedCriteria.forClass(t);  Set<Map.Entry<String, Object>> set = map.entrySet();  for (Iterator<Map.Entry<String, Object>> it = set.iterator(); it.hasNext();) {            Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it.next();            String key = entry.getKey();            String[] keys = key.split(",");            if("eq".equals(keys[0])){             criteria.add(Restrictions.eq(keys[1], entry.getValue()));            }            else if("like".endsWith(keys[0]))            {             criteria.add(Restrictions.like(keys[1], "%"+entry.getValue()+"%"));            }else if("order".endsWith(keys[0]))            {             if("desc".equals(entry.getValue().toString())){              criteria.addOrder(Order.desc(keys[1]));             }else{              criteria.addOrder(Order.asc(keys[1]));             }            }        }  List<T> list = this.getHibernateTemplate().findByCriteria(criteria);  if(list == null){   return new ArrayList<T>();  }  return list; }}

 

2、CommonService
package com.zte.ace.common.service;import java.util.List;import java.util.Map;public interface BaseService {public <T> T getById(Class<T> t, Long id);public long saveObj(Object obj) ;public void updateObj(Object obj);public void deleteObj(Object obj);public <T> List<T> getObjListByParameter(Class<T> t,Map<String,Object> map);}

 

 

3、CommonServiceImpl

package com.zte.ace.common.service;

import java.util.List;import java.util.Map;

import com.zte.ace.common.dao.BaseDaoSupport;

public class BaseServiceImpl implements BaseService{ private BaseDaoSupport baseDao;  public BaseDaoSupport getBaseDao() {  return baseDao; } public void setBaseDao(BaseDaoSupport baseDao) {  this.baseDao = baseDao; } public <T> T getById(Class<T> t, Long id) {  return baseDao.getById(t, id); } public long saveObj(Object obj) {  return baseDao.saveObj(obj); } public void updateObj(Object obj){  baseDao.updateObj(obj); } public void deleteObj(Object obj){  baseDao.deleteObj(obj); }  public <T> List<T> getObjListByParameter(Class<T> t,Map<String,Object> map){  return baseDao.getObjListByParameter(t,map); }}

4、bean配置文件,配置
<bean id="baseDao" class="com.zte.ace.common.dao.BaseDaoSupport" scope="singleton">  <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="baseService" class="com.zte.ace.common.service.BaseServiceImpl" scope="singleton">  <property name="baseDao" ref="baseDao"></property> </bean>
<bean id="applicationPageService" parent="baseService" class="com.zte.ace.page.service.ApplicationPageServiceImpl">  <property name="applicationPageDao" ref="applicationPageDao"></property> </bean>
5、action层引用
  PageControl pageControl = this.applicationPageService.getById(PageControl.class, Long.parseLong(pageId));  Map<String,Object> map = new HashMap<String,Object>();  map.put("eq,pageId", Long.parseLong(pageId));  List<PageControl> pageContorlList = this.applicationPageService.getObjListByParameter(PageControl.class, map);
原创粉丝点击