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对象

转载于:https://my.oschina.net/u/3730801/blog/1577543

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值