当前位置: 代码迷 >> J2EE >> spring中泛型DAO的有关问题
  详细解决方案

spring中泛型DAO的有关问题

热度:90   发布时间:2016-04-22 02:24:27.0
spring中泛型DAO的问题
首先我定义了GenericDao、GenericDaoImpl、GenericService、GenericServiceImpl,如下:
GenericDao:
Java code
public interface GenericDao<T> {         public void save(T entity);        public void remove(T entity);        public void modify(T entity);    }

GenericDaoImpl:
Java code
public class GenericDaoImpl<T> implements        GenericDao<T> {    private Class<T> type;    private HibernateTemplate hibernateTemplate;        public GenericDaoImpl(Class<T> type) {        this.type = type;        }    public GenericDaoImpl(){}        public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {        this.hibernateTemplate = hibernateTemplate;    }        public HibernateTemplate getHibernateTemplate() {        return hibernateTemplate;    }        public void modify(T entity) {        hibernateTemplate.update(entity);    }    public void remove(T entity) {        hibernateTemplate.delete(entity);    }        public void save(T entity) {        hibernateTemplate.save(entity);    }    }

GenericService:
Java code
public interface GenericService<T> {    public void save(T entity);    public void remove(T entity);    public void modify(T entity);    }

GenericServiceImpl:
Java code
public class GenericServiceImpl<T> implements        GenericService<T> {    private GenericDao<T> genericDao;    public void modify(T entity) {        genericDao.modify(entity);            }    public void remove(T entity) {        genericDao.remove(entity);    }    public void save(T entity) {                genericDao.save(entity);    }    public void setGenericDao(GenericDao<T> genericDao) {        this.genericDao = genericDao;    }        }

然后我定义了UserDao、UserDaoImpl、UserService和UserServiceImpl,分别继承自它们,如下:
UserDao:
Java code
public interface UserDao extends GenericDao<User>{    public User findByNameExact(String uname);}

UserDaoImpl:
Java code
public class UserDaoImpl extends GenericDaoImpl<User> implements UserDao {    public UserDaoImpl(){        super(User.class);    }    public User findByNameExact(String uname) {System.out.println("aa");        List<User> list = (List<User>) this.getHibernateTemplate().find(                "from User where userName = '"+uname+"'");        return (!list.isEmpty() && list.size() == 1) ? list.get(0) : null;     }}

UserService:
Java code
public interface UserService extends GenericService<User>{    public User exist(String userName);}

UserServiceImpl:
Java code
public class UserServiceImpl  extends GenericServiceImpl<User> implements UserService{    private UserDao userDao;        public UserDao getUserDao() {        return userDao;    }    public void setUserDao(UserDao userDao) {        this.userDao = userDao;    }    public User exist(String userName) {        // TODO Auto-generated method stub        return userDao.findByNameExact(userName);    }}


此时我的spring配置文件应该怎么写才对?

------解决方案--------------------
XML code
<beans>    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">        <property name="sessionFactory" ref="sessionFactory" />    </bean>        <bean id="genericDao" abstract="true">        <property name="hibernateTemplate" ref="hibernateTemplate" />    </bean>        <bean id="userDao" class="com.yourpackage.UserDaoImpl" parent="genericDao">    </bean></beans>
  相关解决方案