Hibernate 的 Dao 简写

[size=medium][color=brown]Hibernate 的 Dao 简写[/color] [/size]
Spring 为了简写SSH中的DAO层,提供了HibernateDaoSupport类。让我们基本上可以一句话就可以完成对数据库的一个原子操作(增,删,改,查)。
代码写久之后就发现,每个类中都有代码相似度达90%的(增,删,改,查)的5个方法。(查是两个方法)。
既然代码中只是 类名不同而已。想到用泛型抽象。代码如下:
DAO的接口:
import java.util.List;
/**
* 使用泛型编写 Dao中的增删改查。
* @author King_wangyao
*
* @param <T>
*/
public interface EntityDao<T> {
Integer save(T t);//保存一个对象。

Integer update(T t);//更新一个对象。

Integer delete(T t);//删除一个对象。

T get(Integer id);//根据ID查询一个对象。

List<T> find();//查询所有的对象。
}
DAO 的实现类:
@SuppressWarnings("unchecked")
public class EntityDaoSupport<T> extends MyHibernateDaoSupport implements
EntityDao<T> {
//泛型的Class
private Class<T> entityClass;

// 根据反射得到泛型的class.
public EntityDaoSupport() {
entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}

@Override
public Integer save(T o) {
this.getHibernateTemplate().save(o);
return 1;
}

@Override
public Integer update(T o) {
this.getHibernateTemplate().saveOrUpdate(o);
return 1;
}

@Override
public Integer delete(T o) {
this.getHibernateTemplate().delete(o);
return 1;
}

@Override
public T get(Integer id) {
T o = (T) this.getHibernateTemplate().get(entityClass, id);
return o;
}

@Override
public List<T> find() {

List<T>list=this.getHibernateTemplate().find("from "+entityClass.getName());
if (list != null && list.size() > 0) {
return list;
}
return null;
}

}

使用DAO 接口:
public interface UserDao extends EntityDao<Admin>{

Admin find(String userName);

Admin find(String userName,String userPass);

}
DAO的实现类:
@SuppressWarnings("unchecked")
public class UserDaoHibernate extends EntityDaoSupport<Admin> implements UserDao {

public Admin find(String userName) {
List<Admin> list = this.getHibernateTemplate().find("from Admin where userName=?",userName);
if (list != null && list.size() > 0) {
return list.get(0);
}
return null;
}

public Admin find(String userName, String userPass) {
List<Admin> list = this.getHibernateTemplate().find("from Admin where userName=? and userPass=?",new String[]{userName,userPass});
if (list != null && list.size() > 0) {
return list.get(0);
}
return null;
}
}

这样以来,则可以在实际开发时写DAO层就不要每次都去写5大方法了。但在Service层中是可以正确调用的这5大方法的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值