您的位置:首页 > 其它

SSH2框架-泛型DAO(已解决)

2009-12-03 15:53 218 查看
经过参考

https://www.hibernate.org/328.html

http://rainlife.javaeye.com/blog/69293?page=2#comments

http://www.blogjava.net/flustar/archive/2007/12/26/ssha.html

终于搞定了SSH2框架下的泛型DAO问题,下面我把代码贴上来,希望对大家有帮助

我只写了一个方法,其它的可以参照网上的源码

1、IGenericDAO

package com.study.hibernate.dao;

import java.io.Serializable;

import org.springframework.dao.DataAccessException;

public interface IGenericDAO<T, ID extends Serializable> {
public T load(ID id) throws DataAccessException;
}


2、GenericHibernateDAO

package com.study.hibernate.dao;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class GenericHibernateDAO<T, ID extends Serializable> extends HibernateDaoSupport implements IGenericDAO<T, ID> {
private Log log = LogFactory.getLog(getClass());

protected Class<T> entityClass;

public GenericHibernateDAO() {

}

@SuppressWarnings("unchecked")
protected Class getEntityClass() {
if (entityClass == null) {
entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
log.debug("T class = " + entityClass.getName());
}
return entityClass;
}

@SuppressWarnings("unchecked")
public T load(ID id) throws DataAccessException {
T load = (T) getHibernateTemplate().load(getEntityClass(), id);
log.debug("T = " + load);
return load;
}
}


3、IUserDAO

package com.study.hibernate.dao;

import com.study.hibernate.beans.User;

public interface IUserDAO extends IGenericDAO<User, java.lang.String>{
}


4、UserDAO

package com.study.hibernate.dao;

import com.study.hibernate.beans.User;

public class UserDAO extends GenericHibernateDAO<User, java.lang.String> implements IUserDAO {
}


5、applicationContext.xml

<!-- config transaction interceptor -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"></property>
<property name="transactionAttributes">
<props>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!-- define BeanNameAutoProxyCreator -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>userService</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>

<bean id="GenericHibernateDAO" class="com.study.hibernate.dao.GenericHibernateDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

<bean id="UserDAO" class="com.study.hibernate.dao.UserDAO" parent="GenericHibernateDAO">
</bean>


6、user.hbm.xml

<hibernate-mapping>
<class name="com.study.hibernate.beans.User" table="user"  lazy="false">
<id name="fchrId" type="java.lang.String">
<column name="fchrId" length="32" />
<generator class="uuid.hex" />
</id>
</class>
</hibernate-mapping>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: