hibernate dao 泛型问题

光石头 发布于 2010/06/13 09:01
阅读 1K+
收藏 1

现在写的基础 Dao 都是 泛型, 然后针对每个表 写个Dao 把 泛型对象传递过去

public class BaseHibernateDaoImpl<T> implements IBaseOperation<T> {

*******

public class UserDaoImpl extends BaseHibernateDaoImpl<User> implements IUserDao {

********

这样 对每个entity 都要写个dao 才规范些

能不用泛型吗, dao 每次都操作Object,这样和泛型操作有什么不足和缺陷吗?

 

 

加载中
0
Yo.Chen
Yo.Chen

我到现在还很少用泛性

除非是一些未知长度或大小的数组~

0
yzw2048
yzw2048

个人理解泛型只是对类型进行强检查,如果写代码的时候注意点的话,一般不用也行...

0
郑雨涵
郑雨涵

你知道类型安全的重要性么。。。

0
光石头
光石头

不太明白类型安全的重要性啊,我认为 Object 只是个引用类型,实际地址还是 User

0
光石头
光石头

泛型 能提高性能,还是只是强制了类型?如果在编码时注意类型的统一,应该不会有什么问题吧

0
大东哥
大东哥

楼主,你说的Object的实际引用是user,这个是运行时的多态,跟泛型不是很有关系。

泛型是用于编译期检查的,泛型可以在编译期做类型检查,否则你得自己写丑漏的类型转换,不用泛型,有些时候你还得写

if(bbb instances of  xxx)这样的丑陋代码,实际上,你在作一个低级的人脑编译器。这些类型推断用javac编译器帮你做,何乐不为?重点是类型推断。这些活干嘛自己来干?

泛型还可以减少重复的代码,等等等等等等。。。。好处。

编译后,所有类型会擦除。跟泛不泛型没有关系了。

0
光石头
光石头

大部分我还是用泛型的,比如 List<User> 我说的是dao 不使用 泛型,使用Object,这样 整个项目的dao 只会有一两个了,减少大量的dao了

0
大东哥
大东哥

我不太明白,你所说的用Object怎么就减少了大量的dao?

0
光石头
光石头

baseDao.save(Object o); 不需要每个entity再写一个dao了,公用一个

0
大东哥
大东哥

另外,你可以定义这一个通用的dao,其中有泛型方法,也有普通的方法,普通的增删改确实用Object已经足够。

public class SimpleDao {

public void save(Object entity){

session.save(entity);

}

public void delete(Object entity){

session.delete(entity);

}

public <T> T get(Class<T> clazz,Serializable id){

return (T)session.get(clazz,id);

}

}

所有简单的对实体的crud都可以用这个dao统一处理。

也没有什么权威资料表明,每一个实体都得用一个专有的dao来处理才规范这种规则吧。

用泛型,不一定非得定义一个泛型类。也可以仅仅在普通类中,定义某几个范型方法。

返回顶部
顶部