Hibernate 的 Dao 简写
Hibernate的Dao简写
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大方法的。
相关推荐
dongxurr 2020-08-08
园搬家测试账号 2020-06-12
技术之博大精深 2020-06-10
snowphy 2020-05-12
snowguy 2020-05-03
yunzhonmghe 2020-04-07
cnflat0 2020-03-04
kevincheung 2020-02-20
neweastsun 2020-02-18
疯狂老司机 2020-02-13
xcguoyu 2019-12-04
纯粹的果子 2020-01-03
smalllove 2019-12-29
横云断岭 2019-12-29
zhaojp0 2019-12-29
javamagicsun 2019-12-11
Andrea0 2019-11-30