SSH中公共Dao层、Dao接口

早做项目时候!为了优化代码可以创建公共类与接口 先写一个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对象
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值