java基础Dao以及基础Service的简易方式实现
2015-12-13 14:26
399 查看
Dao接口
Dao实现
基础Service接口
基础Service简易实现方式
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。
相关文章推荐
- Android 在eclipse 创建selectors(随记三)
- JAVA8的新特性学习笔记-(lambda、stream)
- java IO流学习总结
- 工厂模式
- eclipse机器硬重启后package和project视图中看不见工作区间中的工程
- 【深入】java 单例模式
- Java虚拟机(一)内存管理子系统
- java多线程,多个客户端之间发送文件
- JAVA读取TXT文本中的数据
- struts2重要知识点总结(2)
- JAVA-建造者设计模式
- 分享java中设置代理的两种方式
- Java Multi-Threading
- 8张图理解Java
- java:IO流学习小结
- JAVA-单例模式的七种写法
- Java工程师成神之路~
- java float小数相减不准确
- java 中的原始类型与原始封装类型
- spring4.0 源码分析 DefaultListableBeanFactory和XmlBeanDefinitionReader(二)