您的位置:首页 > 编程语言 > Java开发

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

2015-12-13 14:26 399 查看
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];// 获取第一个类型参数的真实类型
}

@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() {
return getCurrentSession().createQuery("FROM " + clazz.getSimpleName()).list();
}

@Override
public 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;
}

@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();
}
}


基础Service简易实现方式

@Service("userService")
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService {

private UserDao userDao;

@Resource
public void setUserDao(UserDao userDao) {
super.setBaseDao(userDao);
this.userDao = userDao;
}
}
使用set方法注入UserDao时,也将子类的Dao实现类对象传递给了BaseDao。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: