如题:
IGenericDao.java
public interface IGenericDao<T, ID extends Serializable> { /**
* 通过ID来得到实体对象
*
* @param id
* 实体对象的标识符
* @param lock
* 使用的锁模式
* @return 该主键值对应的实体对象
*/
T findById(ID id, boolean lock);
/**
* 将实体对象持久化
*
* @param entity
* 需要进行持久化操作的实体对象
* @return 持久化的实体对象
*/
T saveOrUpdate(T entity); ......
}GenericDao.java 实现IGenericDao
public class GenericDao<T, ID extends Serializable> extends HibernateDaoSupport implements IGenericDao<T, ID> { // 保持实体对象类的类型
private Class<T> persistentClass; public Class<T> getPersistentClass() {
return persistentClass;
} public GenericDao(Class<T> persistentClass) {
this.persistentClass = persistentClass;
} public GenericDao(){
} /**
* 得到所有的实体对象
*
* @return
*/
public List<T> findAll() {
// TODO Auto-generated method stub
return findByCriteria();
} /**
* 根据对象的属性和属性的值来得到满足条件的实体对象
*
* @param exampleInstance
*
* @return
*/
public List<T> findByExample(T exampleInstance) {
// TODO Auto-generated method stub
return findByCriteria(Example.create(exampleInstance));
} /**
* 通过ID来得到实体对象
*
* @param id
*
* @param lock
*
* @return
*/
@SuppressWarnings("unchecked")
public T findById(ID id, boolean lock) {
// TODO Auto-generated method stub
try {
T instance;
if (lock)
instance = (T) getHibernateTemplate().getSessionFactory().getCurrentSession().get(getPersistentClass(), id,
LockMode.UPGRADE);
else
instance = (T) getHibernateTemplate().getSessionFactory().getCurrentSession().get(getPersistentClass(), id);
return (T) instance;
} catch (RuntimeException re) {
throw re;
} } /**
* 将实体对象持久化
*
* @param entity
*
* @return
*/
public T saveOrUpdate(T entity) {
// TODO Auto-generated method stub
getHibernateTemplate().getSessionFactory().getCurrentSession().saveOrUpdate(entity);
return entity;
} /**
* 将实体对象变为瞬态
*
* @param entity
*
*/
public void delete(T entity) {
// TODO Auto-generated method stub
getHibernateTemplate().getSessionFactory().getCurrentSession().delete(entity);
} @SuppressWarnings("unchecked")
protected List<T> findByCriteria(Criterion... criterion) { try {
Criteria crit = getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(getPersistentClass());
for (Criterion c : criterion) {
crit.add(c);
}
return crit.list();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
IUserInfoDAO 继承了 IGenericDao接口现在我的业务层想调用这个IUserInfoDAO 继承得到的 saveOrUpdate(); Spring 配置文件如何配置
路过的达人请帮忙解决下
IGenericDao.java
public interface IGenericDao<T, ID extends Serializable> { /**
* 通过ID来得到实体对象
*
* @param id
* 实体对象的标识符
* @param lock
* 使用的锁模式
* @return 该主键值对应的实体对象
*/
T findById(ID id, boolean lock);
/**
* 将实体对象持久化
*
* @param entity
* 需要进行持久化操作的实体对象
* @return 持久化的实体对象
*/
T saveOrUpdate(T entity); ......
}GenericDao.java 实现IGenericDao
public class GenericDao<T, ID extends Serializable> extends HibernateDaoSupport implements IGenericDao<T, ID> { // 保持实体对象类的类型
private Class<T> persistentClass; public Class<T> getPersistentClass() {
return persistentClass;
} public GenericDao(Class<T> persistentClass) {
this.persistentClass = persistentClass;
} public GenericDao(){
} /**
* 得到所有的实体对象
*
* @return
*/
public List<T> findAll() {
// TODO Auto-generated method stub
return findByCriteria();
} /**
* 根据对象的属性和属性的值来得到满足条件的实体对象
*
* @param exampleInstance
*
* @return
*/
public List<T> findByExample(T exampleInstance) {
// TODO Auto-generated method stub
return findByCriteria(Example.create(exampleInstance));
} /**
* 通过ID来得到实体对象
*
* @param id
*
* @param lock
*
* @return
*/
@SuppressWarnings("unchecked")
public T findById(ID id, boolean lock) {
// TODO Auto-generated method stub
try {
T instance;
if (lock)
instance = (T) getHibernateTemplate().getSessionFactory().getCurrentSession().get(getPersistentClass(), id,
LockMode.UPGRADE);
else
instance = (T) getHibernateTemplate().getSessionFactory().getCurrentSession().get(getPersistentClass(), id);
return (T) instance;
} catch (RuntimeException re) {
throw re;
} } /**
* 将实体对象持久化
*
* @param entity
*
* @return
*/
public T saveOrUpdate(T entity) {
// TODO Auto-generated method stub
getHibernateTemplate().getSessionFactory().getCurrentSession().saveOrUpdate(entity);
return entity;
} /**
* 将实体对象变为瞬态
*
* @param entity
*
*/
public void delete(T entity) {
// TODO Auto-generated method stub
getHibernateTemplate().getSessionFactory().getCurrentSession().delete(entity);
} @SuppressWarnings("unchecked")
protected List<T> findByCriteria(Criterion... criterion) { try {
Criteria crit = getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(getPersistentClass());
for (Criterion c : criterion) {
crit.add(c);
}
return crit.list();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
IUserInfoDAO 继承了 IGenericDao接口现在我的业务层想调用这个IUserInfoDAO 继承得到的 saveOrUpdate(); Spring 配置文件如何配置
路过的达人请帮忙解决下
只不过在Service层写的时候要将“T”换成实体类
如果你Service层也用了泛型,那么在action中声明Service的时候将“T”换成实体类
<property name="dataSource" ref="dataSource" />
<property name="namingStrategy">
<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider
</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache-hibernate.xml</prop>
</props>
</property>
<property name="lobHandler">
<ref bean="oracleLobHandler"/>
</property>
</bean> <!-- 事务配置 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
private IUserInfoBiz iuserInfoBiz;
public void setIntercontinentalDAO(IIntercontinentalDAO intercontinentalDAO) {
this.intercontinentalDAO = intercontinentalDAO;
}public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
UserInfoForm userInfoForm = (UserInfoForm) form;
UserInfo u= new UserInfo();
if (null != intercontinectalForm) {
u= BeansUtils.copyProperties(
new UserInfo (), userInfoForm );
u.setId(null);
} else
u.setName(request.getParameter("name"));
iuserInfoBiz.saveOrUpdate(u);
return mapping.getInputForward();
}
这里没有T 饿 我的 Service 也是使用了泛型IUserInfoBiz 同样继承了 Service的泛型类public interface IUserInfoBiz extends IGenericDao<UserInfo, Integer> {}
public class UserInfoBizImpl extends GenericDao<Action,Integer> implements IUserInfoBiz { public UserInfoBizImpl() {
super(UserInfo.class);
}}
public class GenericDao<T, ID extends Serializable> extends HibernateDaoSupport implements IGenericDao<T, ID> { // 保持实体对象类的类型
private Class<T> persistentClass; public Class<T> getPersistentClass() {
return persistentClass;
} public GenericDao(Class<T> persistentClass) {
this.persistentClass = persistentClass;
}
……
注解也行
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="baseManager" class="com.hz.service.impl.BaseManagerImpl"
abstract="true">
<property name="baseDAO">
<ref bean="baseDao" />
</property>
</bean>
<bean id="admininfoManager" class="com.hz.service.impl.AdmininfoManagerImpl"
parent="baseManager"></bean>