获取父类的泛型类型:
import java.lang.reflect.ParameterizedType;
/**
* 获取父类的泛型类型
* @author Administrator
*/
public class GenericClass {
@SuppressWarnings("rawtypes")
public static Class getGenericClass(Class clazz){
ParameterizedType type=(ParameterizedType)clazz.getGenericSuperclass();
Class entityClass=(Class)type.getActualTypeArguments()[0];
return entityClass;
}
}
domain层:
public class SysUserGroup {
private Integer id;
private String name;
private String principal;
private String incumbent;
private String remark;
......
}
DAO层:
import java.io.Serializable;
public interface ISysUserGroupDao<SysUserGroup> {
public final static String SERVICE_NAME="com.crm.dao.impl.SysUserGroupDaoImpl";
SysUserGroup findObjectById(Serializable id);
}
DAO实现层:
import java.io.Serializable;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
@Repository(ISysUserGroupDao.SERVICE_NAME)
public class SysUserGroupDaoImpl<SysUserGroup>extends HibernateDaoSupport implements ISysUserGroupDao<SysUserGroup>{
private Class entityClass=GenericClass.getGenericClass(this.getClass());
@Resource(name="sessionFactory")
public void setSessionFactoryDI(SessionFactory sessionFactory){
System.out.println("sessionFactory:"+sessionFactory);
super.setSessionFactory(sessionFactory);
}
@Override
public SysUserGroup findObjectById(Serializable id) {
if(id==null){
throw new RuntimeException("您要查找的【"+id+"】不能为空。");
}
return (SysUserGroup)this.getHibernateTemplate().get(entityClass, id);
}
}
单元测试:
import java.io.Serializable;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class testFindObjectById {
@Test
public void test(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
ISysUserGroupDao sysUserGroupDao=(ISysUserGroupDao)ctx.getBean(ISysUserGroupDao.SERVICE_NAME);
Serializable id=1;
SysUserGroup sysUserGroup=sysUserGroupDao.findObjectById(id);
System.out.println(sysUserGroup.getName());
}
}