SSH中公共Dao层、Dao接口

来源:互联网 发布:java socket 聊天室 编辑:程序博客网 时间:2024/05/29 03:07
早做项目时候!为了优化代码可以创建公共类与接口 先写一个Dao层的公共接口,在里面实现增删改查等各种功能 public interface IBaseDao<T> { //增加 public void save(T entity);


//删除
public void delete(Long id);


//修改
public void update(T entity);


//根据id查询
public T getById(Long id);


//根据多个id查询
public List<T> getByIds(Long[] ids);


//查询全部
public List<T> getAll();
} 给一个泛型,因为这个接口要背以后写的Dao层接口继承,会有一个Class类 创建一个实现类,实现这个公共接口 @SuppressWarnings("unchecked") public class BaseDaoImpl<T> implements IBaseDao<T>{


@Autowired                //注入SessionFactory
private SessionFactory sessionFactory;


//继承BaseDaoImpl的类的Class类
private Class<T> clazz;


public BaseDaoImpl(){
//返回表示此Class所表示的实体(类、接口、基本类型或void)的直接超类的type
//实际上就是父类的Class类
ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();

//返回表示此类型实际类型参数的type对象的数组
//实际上获得的是父类的泛型类型
Type[] type = genericSuperclass.getActualTypeArguments();

clazz = (Class<T>) type[0];
}


//获得session
public Session getSession(){
return sessionFactory.getCurrentSession();
}


public void save(T entity) {
// TODO Auto-generated method stub
getSession().save(entity);
}


public void delete(Long id) {
// TODO Auto-generated method stub
getSession().delete(getSession().get(clazz, id));
}


public void update(T entity) {
// TODO Auto-generated method stub
getSession().update(entity);
}


public T getById(Long id) {
// TODO Auto-generated method stub
return (T) getSession().get(clazz, id);
}


public List<T> getByIds(Long[] ids) {
// TODO Auto-generated method stub
String hql = "from "+clazz.getSimpleName()+" where id in (:ids)";
Query query = getSession().createQuery(hql);
query.setParameterList("ids", ids);
return query.list();
}


public List<T> getAll() {
// TODO Auto-generated method stub
String nameClass = clazz.getSimpleName();//获得泛型的名称
String sql = "from "+nameClass;
return getSession().createQuery(sql).list();
}
} //创建方法获取到泛型的type和获得到Session对象
原创粉丝点击