【讨论贴】Dao层的调用是否应该做成静态

Ant 2009-06-24 03:15:15
加精
最近碰到一个以前没有想过的问题,觉得应该跟论坛的朋友们讨论一下:

在DAO的实现上,以前常用Spring的依赖注入来生成Dao对象,然后在对象中通过继承或者实现更抽象的接口,调用公共的代码来获得数据库的Connection连接,由于Spring默认情况下都是单例模式,所以每个Dao对象也就只有一个实例。习惯上好像就这样了!

那么如果我把Dao对象的CRUD相关方法全部变成静态的呢?
例如:
public class UserDao{
public Session getHibernateSession(){...}

public static User getUserByID(String id){
User user = getHibernateSession().get(id);
//close session...
return user;
}

public static void addUser(User user){
getHibernateSession().save(user);
//close session...
}
}

理论上来说,这样的话甚至节约了new一个UserDao的实例来完成任务,只需要UserDao class实例就可以了,但总觉得这样用不是很放心,希望大家都来讨论一下,用静态方法来完成数据库操作是否有隐藏的危害呢?如果没有,又到底是静态还是Spring注入调用实例的非静态更好一些呢?
...全文
2091 36 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunofsummer 2010-12-28
  • 打赏
  • 举报
回复
我都没考虑过用静态的 我觉得既然有spring了 大家也别考虑那么多了。
ijse 2010-12-28
  • 打赏
  • 举报
回复
靠,,更糊涂了。。

怎么就不能统一一下呢?有的说能用,有的说不能用。。

火龙果前辈说的又没怎么看懂。。


还没学Spring..
liuyong1352 2010-04-21
  • 打赏
  • 举报
回复
学习ing 收益匪浅
dsamsofter 2009-07-02
  • 打赏
  • 举报
回复
提得问题很好,各位回答的也很不错,学习了!
飞龙在天bruce 2009-07-01
  • 打赏
  • 举报
回复
可能线程处理时会有影响!
mail_ricklee 2009-07-01
  • 打赏
  • 举报
回复
很简单,静态只有一个内存地址,所以如果这个函数没有处理完,那么其它必需等待该函数处理完,才能继续调用该函数

完了
wang8 2009-07-01
  • 打赏
  • 举报
回复
学习
xu20cn 2009-07-01
  • 打赏
  • 举报
回复
public class HibernateUtil
{
static SessionFactory sessionFactory = null;
static
{
final Configuration cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}

public static SessionFactory getSessionFactory()
{
return sessionFactory;
}

public static Session getSeesion()
{
return sessionFactory.openSession();
}
}
xu20cn 2009-07-01
  • 打赏
  • 举报
回复
写个类, 每个service只要new一次, 通过SprintUtil在任何地方可获取

public class SpringUtil {

private static ApplicationContext _ctx;

private SpringUtil(){

}

static{
_ctx = new ClassPathXmlApplicationContext(
"classpath:/spring-context-db.xml");
}

public static Object getBean(String beanName){
return _ctx.getBean(beanName);
}

}
ywy256 2009-06-30
  • 打赏
  • 举报
回复
在我作的项目中,这方面很少用到静态的,我更习惯用spring直接生成
xing_love_ting 2009-06-30
  • 打赏
  • 举报
回复
忽忽 火龙果前辈真的太厉害了 学习了 以后记得少用static
hongyejie 2009-06-30
  • 打赏
  • 举报
回复
顶!
cchaha 2009-06-30
  • 打赏
  • 举报
回复
好贴,MARK
xinming1558 2009-06-30
  • 打赏
  • 举报
回复 1
[Quote=引用 6 楼 bao110908 的回复:]
DAO 采用静态方法的话有好处,也有坏处。

好处的话,楼主肯定已经察觉到了,这里也不多说了。

我来谈一下不好之处:

做成静态方法的话,完全把 DAO 想成一个工具类了。一般来说工具类是与具体的业务性质无关的,
存放的是一些工具方法,在任何程序中都有可能用到的东西。

做成静态方法的话,让业务层与 DAO 层完全耦合起来了,如果 DAO 在技术更新后需要采用其他的
ORM 工具重新实现的话,这样一来根本就不可…
[/Quote]
说的似乎很有道理,我没有用静态的!顶下
加油馒头 2009-06-30
  • 打赏
  • 举报
回复
恩 很好

不错 很有特色
Eillen_20 2009-06-30
  • 打赏
  • 举报
回复
带上小凳子 ~挨家去取经 哈哈
Q759213271 2009-06-30
  • 打赏
  • 举报
回复
我用静态的
myhonor 2009-06-30
  • 打赏
  • 举报
回复
学习了
  • 打赏
  • 举报
回复
我是来接分的。
加载更多回复(16)

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧