tags: 代码库
BaseDao
package zhongfucheng.core.dao;
import java.io.Serializable;
import java.util.List;
public interface BaseDao<T> {
//新增
public void save(T entity);
//更新
public void update(T entity);
//根据id删除
public void delete(Serializable id);
//根据id查找
public T findObjectById(Serializable id);
//查找列表
public List<T> findObjects();
}
复制代码
#baseDaoImpl#
package zhongfucheng.core.dao.impl;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import zhongfucheng.core.dao.BaseDao;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
public abstract class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
Class<T> clazz;
public BaseDaoImpl(){
ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass();//BaseDaoImpl<User>
clazz = (Class<T>)pt.getActualTypeArguments()[0];
}
@Override
public void save(T entity) {
getHibernateTemplate().save(entity);
}
@Override
public void update(T entity) {
getHibernateTemplate().update(entity);
}
@Override
public void delete(Serializable id) {
getHibernateTemplate().delete(findObjectById(id));
}
@Override
public T findObjectById(Serializable id) {
return getHibernateTemplate().get(clazz, id);
}
@Override
public List<T> findObjects() {
Query query = getSession().createQuery("FROM " + clazz.getSimpleName());
return query.list();
}
}
复制代码
BaseService
interface BaseService<T> {
//新增
void save(T entity);
//更新
void update(T entity);
//根据id删除
void delete(Serializable id);
//根据id查找
T findObjectById(Serializable id);
//查找列表
List<T> findObjects();
}
复制代码
BaseServiceImpl
public abstract class BaseServiceImpl <T> implements BaseService <T>{
//通过BaseDao来操作数据库
private BaseDao<T> baseDao;
public void setBaseDao(BaseDao<T> baseDao) {
this.baseDao = baseDao;
}
@Override
public void save(T entity) {
baseDao.save(entity);
}
@Override
public void update(T entity) {
baseDao.update(entity);
}
@Override
public void delete(Serializable id) {
baseDao.delete(id);
}
@Override
public T findObjectById(Serializable id) {
return baseDao.findObjectById(id);
}
@Override
public List<T> findObjects() {
return baseDao.findObjects();
}
}
复制代码
BaseService的使用
- 由于Service的代码重复性太高了,我们也将Service进行抽取。抽取成一个BaseService接口
- BaseServiceImpl实现BaseService接口,但他要使用BaseDao对象来对实现的方法进行调用
- 此时,BaseServiceImpl是一个抽象类,它本身不能实例化了。那怎么将BaseDao实例化呢??
- 当我们的InfoServiceImpl继承继承着BaseServiceImpl时,本身就需要用到InfoDao来对该模块的业务进行调用。
- 在InfoServiceImpl对InfoDao实例化是很容易的,可以使用自动装配,set方法注入等等。这次我们使用set方法注入!
- set方法有什么好处??能够在InfoServiceImpl注入InfoDao对象的同时,还能进行其他操作。比如:调用父类的set方法!!!!!!!
- 我们只要在BaseServiceImpl提供一个setBaseDao方法,子类再把自身的Dao传递进去。那么我们的BaseDao就被实例化了!
如果您觉得这篇文章帮助到了您,可以给作者一点鼓励