java基础Dao以及基础Service的简易方式实现

来源:互联网 发布:java自学看什么app好些 编辑:程序博客网 时间:2024/05/05 19:47

Dao接口

public interface BaseDao<T> {//新增public void save(T entity);//更新public void update(T entity);//删除public void delete(Serializable id);//根据id查询public T findObjectById(Serializable id);//查询列表public List<T> findObjects();}

Dao实现

public abstract class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {Class<T> clazz;/** * 获取真实的泛型类型 */public BaseDaoImpl(){// 获取当前new的对象的 泛型的父类 类型ParameterizedType pt =  (ParameterizedType)this.getClass().getGenericSuperclass();//BaseDaoImpl<User>clazz = (Class<T>)pt.getActualTypeArguments()[0];// 获取第一个类型参数的真实类型}@Overridepublic void save(T entity) {getHibernateTemplate().save(entity);}@Overridepublic void update(T entity) {getHibernateTemplate().update(entity);}@Overridepublic void delete(Serializable id) {getHibernateTemplate().delete(findObjectById(id));}@Overridepublic T findObjectById(Serializable id) {return getHibernateTemplate().get(clazz, id);}@Overridepublic List<T> findObjects() {return getCurrentSession().createQuery("FROM " + clazz.getSimpleName()).list();}@Overridepublic List<T> findObjects(String hql, List<Object> parameters) {Query query = getCurrentSession().createQuery(hql);if(parameters != null){for(int i = 0; i < parameters.size(); i++){query.setParameter(i, parameters.get(i));}}return query.list();}}
基础Dao的采用的是java的反射技术,在基础Dao中获取子类真实的泛型父类,从而达到通用的目的。


基础Service接口

public abstract class BaseServiceImpl<T> implements BaseService<T> {private BaseDao<T> baseDao;public void setBaseDao(BaseDao<T> baseDao) {this.baseDao = baseDao;}@Overridepublic void save(T entity) {baseDao.save(entity);}@Overridepublic void update(T entity) {baseDao.update(entity);}@Overridepublic void delete(Serializable id) {baseDao.delete(id);}@Overridepublic T findObjectById(Serializable id) {return baseDao.findObjectById(id);}@Overridepublic List<T> findObjects() {return baseDao.findObjects();}}

基础Service简易实现方式

@Service("userService")public class UserServiceImpl extends BaseServiceImpl<User> implements UserService {private UserDao userDao;@Resourcepublic void setUserDao(UserDao userDao) {super.setBaseDao(userDao);this.userDao = userDao;}}
使用set方法注入UserDao时,也将子类的Dao实现类对象传递给了BaseDao。


0 0