DAO层重构
来源:互联网 发布:mmd制作软件手机 编辑:程序博客网 时间:2024/05/16 17:27
package com.lrq.dao.base;
import java.io.Serializable;
import java.util.Collection;
public interface ICommonDao<T> {
public void persist(T t);
public void delete(Serializable id);
public void update(T t);
public T get(Class<T> clazz,Serializable id);
public Collection<T> listAll();
}
通用Dao实现CommonDaoImpl:
package com.lrq.dao.base.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import com.lrq.dao.base.ICommonDao;
public abstract class CommonDaoImpl<T> implements ICommonDao<T> {
private Class clazz;
@Autowired
public HibernateTemplate hibernateTemplate;
public CommonDaoImpl() {
ParameterizedType type = (ParameterizedType) this.getClass()
.getGenericSuperclass();
clazz = (Class) type.getActualTypeArguments()[0];
}
public void persist(T t) {
if (t != null)
hibernateTemplate.persist(t);
}
@SuppressWarnings("unchecked")
public void delete(Serializable id) {
if (id != null) {
Object entity = hibernateTemplate.get(clazz, id);
if (entity != null)
hibernateTemplate.delete(entity);
}
}
public void update(T t) {
if (t != null) {
hibernateTemplate.update(t);
}
}
@SuppressWarnings("unchecked")
public T get(Class<T> clazz, Serializable id) {
return (T) (id == null ? null : hibernateTemplate.get(clazz, id));
}
@SuppressWarnings("unchecked")
public Collection<T> listAll() {
return hibernateTemplate.find("from " + clazz.getSimpleName());
}
}
具体的某个实体DAO:
package com.lrq.dao;
import java.util.Collection;
import com.lrq.dao.base.ICommonDao;
import com.lrq.domain.Privilege;
public interface IPrivilegeDao extends ICommonDao<Privilege> {
public Privilege getPrivilegeByName(String nodeName);
public Collection<Privilege> getPrivilegesByIds(String ids);
}
对应的Dao实现:
package com.lrq.dao.impl;
import java.util.Collection;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.lrq.dao.IPrivilegeDao;
import com.lrq.dao.base.impl.CommonDaoImpl;
import com.lrq.domain.Privilege;
import com.lrq.util.StringUtils;
import freemarker.template.utility.StringUtil;
@Repository
public class PrivilegeDaoImpl extends CommonDaoImpl<Privilege> implements
IPrivilegeDao {
@SuppressWarnings("unchecked")
public Privilege getPrivilegeByName(String nodeName) {
// 如果 入的参数都为null,我认为没必要和数据库进行交互,直接返回null;
if (StringUtils.isEmpty(nodeName))
return null;
List<Privilege> list = hibernateTemplate.find(
"from Privilege where name=?", nodeName);
return list != null && list.size() > 0 ? list.get(0) : null;
}
@SuppressWarnings("unchecked")
public Collection<Privilege> getPrivilegesByIds(String ids) {
if (!StringUtils.isEmpty(ids)) {
StringBuffer sb = new StringBuffer();
sb.append("from Privilege where id in(");
sb.append(ids);
sb.append(" )");
System.out.println(sb.toString());
List<Privilege> list = this.hibernateTemplate.find(sb.toString());
return list;
}
return null;
}
}
注意:通用的Dao实现是一个抽象类,而且必须这么做;因为他不能有实例对象
0 0
- DAO层重构
- DAO
- DAO
- DAO
- DAO
- DAO
- DAO
- DAO
- Dao
- dao
- dao
- dao
- DAO
- DAO
- DAO
- DAO
- DAO
- DAO
- struts总结完整整理版
- Spring定时器的使用
- mybatis笔记
- service层重构的解决方案(三种解决…
- Action层重构
- DAO层重构
- BP 神经网络 反向传播算法
- Hibernate+SpringMVC整合实战一:搭…
- Hibernate+SpringMVC整合:实战二,…
- Hibernate+SpringMVC整合:实战三,…
- 反射技术实现POI表格信息的注入
- 设计模式--单例设计模式
- 设计模式--工厂设计模式(一)
- 设计模式--工厂设计模式(二)