|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (4) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-04-11
这个是我写的泛型dao
看看对你是否有帮助 http://www.blogjava.net/flustar/archive/2007/12/26/ssha.html |
|
| 返回顶楼 | |
|
时间:2008-04-11
在liferay中大部分增删改的action是相同的,通过常量来判断Constants.CMD。来判断执行什么操作,service也类似。
|
|
| 返回顶楼 | |
|
时间:2008-04-12
liujunsong 写道 我对这种所谓通用的DAO感觉很不好,根据我个人的经验,这种代码就是系统的中一个定时炸弹。
除了象hibernate这种专门针对数据库进行OR映射的基础软件以外,在应用开发中,每个对于数据库的操作,即使是简单的insert,update,delete都应该是有所控制的,不能够直接来调用。 象上面那样设计的类,简单看起来没啥大毛病,当这个类被几十个类进行调用以后,出现问题都不知道是在那里,给将来的程序维护带来很大困扰。 我个人的经验是少作一些通用的功能,尤其在你不能完全理解和控制的情况下。 我现在也同意你这样的说法了 这两天一真在用我写的那个,但是,发现在调试的时候太痛苦了,好多时候甚至找不到是什么地方出的,在那个类错的...现在正在重构中... 非常感谢大家对我这个问题的关注,谢谢 |
|
| 返回顶楼 | |
|
时间:2008-04-12
348105874 写道 c,,u,d等方法最好不要混在一起
这点我同意 可以防止混乱 |
|
| 返回顶楼 | |
|
时间:2008-04-12
应该说范型dao是最好的解决方案了吧。
hibernate官网上有的。 |
|
| 返回顶楼 | |
|
时间:2008-04-13
魔力猫咪 写道 引用 至于public int executeUpdate(final String hql)这个还请你举个例子说明一下。 主要是你传入了HQL语句。HQL是Hibernate专有的语言,别的框架不支持这种语言。虽然JPA的查询语言和HQL基本差不多,但是还有可能在某些地方不一样。所以你这个方法就变成了只能Hibernate使用的专用方法。Service的使用者也就必须知道底层实现是Hibernate。造成了应用和持久化的紧耦合。
还有就是Update和Delete操作语句要小心,如果使用了Hibernate的二级缓存和查询缓存,那么Update和Delete使用的时候,必须清理缓存。你这里并没有缓存清理操作。除非你绝对不使用二级缓存,不然这么做是会出问题的。 我们封装的时候,对这些方面要考虑清楚。 public int executeUpdate(final String hql);对于这种方式,我觉得还是没问题的,不会又用hibernate又用jpa的吧; 对于这个方法对二级缓存的影响,确实需要注意。 lz的dao可以考虑用范型的,这样子类dao将明确知道对应的实体类型,返回时候也不必转型了。另外,不要将crud搞成一个方法,反倒迷惑了调用者。 再有lsk的那个通用dao确实挺全的,呵呵。 |
|
| 返回顶楼 | |
|
时间:2008-08-05
魔力猫咪 写道 public boolean idu(char t)这个方法严重有问题。为什么要把增删改用这个间接实现?查询方法也一样。头一次看见这么写的。而且方法传入的那几个char也没有做静态属性,别人不知道你源代码的情况下谁知道应该往里头传什么。增删改方法如果一个请求内多次调用,每次都要提交一次,等于实际上没有事务控制。如果中间操作出错,事务原子性根本无法保证。建议你去看看Spring的HibernateSupper。
这是什么? |
|
| 返回顶楼 | |
|
时间:2008-08-06
以前就是由于这种写法粘连性太强,为了清晰解耦才把方法清晰划分出来,你这 ....... 唉,我都不好意思说什么了,如果你才学习的话倒也情有可原.......
|
|
| 返回顶楼 | |
|
时间:2008-08-07
其实有了hibernate,dao还有什么用?
|
|
| 返回顶楼 | |










