Hibernate3里面的Dao层是否可以用单例?

问题描述

不使用Spring。我有一个RootDao的父类,里面有一个执行HQL语句的方法RootDao代码片段://通过传入的HQL查询语句,返回Listpublic List getList(String hql) { //创建session Session session = HibernateSessionFactory.getSession(); List list = new ArrayList(); Query query = null; try { //执行传入的hql语句。from User之类 query = session.createQuery(hql); list = query.list(); //关闭session session.close(); } catch (HibernateException he) { logger.error(he); } finally { try { if (session != null && session.isOpen()) { session.close(); } } catch (Exception e) { logger.error(e); } } return list; }有一个UserDao,继承了RootDao,有一个getUserList()方法,拼一个HQL语句,使用父类的getList()方法获取Listpublic class UserDao extends RootDao{ //查询username等于传入的值的List public List<User> getUserList(String username){ List<User> userlist = new ArrayList<User>(); userlist = this.getList("from User where username = '"+username+"'"); retrun userlist; }}一般来说service层new一个UserDao即可调用getUserList("admin")方法即UserDao udao = new UserDao();udao.getUserList("admin");后来一个朋友说UserDao可以写成单例udao用getInstance()方式来获取,保证UserDao只有一个实例问题:1、UserDao用单例,调用比较频繁的时候,会不会对传入的username产生影响?2、调用频繁的时候,RootDao的getList方法里的session.close()会不会对别的产生影响?

解决方案

1。Dao是对数据库中数据进行CRUD操作的,如果传入的username没有进行写操作,那么是没有问题的,因为Dao层是针对数据库的操作,所以任何有关数据库操作以外的操作都不要在Dao层中做。2。如果这个操作HibernateSessionFactory.getSession()返回的是原型,那么是没有影响的,但是如果返回的是单例,那你就需要认真考虑下了,因为这样会影响到多次操作,当你第一次执行这个方法时,没有问题,但当你第二次执行时,因为第一次执行时,Session已经关闭,再次操作会发生错误。
解决方案二:
HibernateSessionFactory.getSession()是新建一个SESSION,SESSION后面关不关闭跟单例没关系。
解决方案三:
没问题的。

时间: 2024-09-20 13:40:11

Hibernate3里面的Dao层是否可以用单例?的相关文章

实例-一个方法里需要多次使用一个用单例创建的类 需要多次使用单例方法创建吗?

问题描述 一个方法里需要多次使用一个用单例创建的类 需要多次使用单例方法创建吗? 通过单例创建一个实例,下次调用实例 和 每次都通过单例方法创建有什么不同? 解决方案 既然是单例,每次调用都使用第一次创建的对象,不会每次都创建. 也许你想说单例和静态方法的区别.单例的对象可以继承,但是静态方法不行. 解决方案二: 一个方法里需要使用单例创建一个实例变量,这个实例变量需要多次使用. 每次使用多用时都用单例创建和第一次使用单例创建一个实例变量,以后直接调用实例变量.这两种方法有什么不同?那个更好 解

对SSH项目里面的DAO的疑惑

问题描述 HIBERNATE的DAO里面一般写了三个包 一个ENTITY 一个IFACE 一个IMPL STRUTS2后台的ACTION用的是ENTITY里面的类 SPRING注入的是IMPL里面的类 这之间有什么联系呢 ?原理是什么呢? ENTITY里面的类和IMPL里面的类有什么联系呢? 问题补充:7454103 写道 解决方案 IMPL里面的类操作ENTITY里面的类 ENTITY 本身就是一个 JavaBean 只有属性和 set get (一般情况下!)他就相当于: 数据IMPL:实现

asp.net-Model层里面的get和set问题

问题描述 Model层里面的get和set问题 public string user_name { set { _loginname = value; } get { return _loginname; } } 和 public string user_name{set;get;}有什么区别? 解决方案 区别是第一种写法能够在get和set中做更多的控制,比如判断是否为空,做一些逻辑处理等等,而第二种只能简单的赋值,不能写逻辑. 解决方案二: 一样的 第二个是第一个简写 语法糖而已 以前不支持

如何完成dao层的注释的依赖注入

问题描述 由于业务需要,我现在要将应用中使用数据库和不使用数据库的分开加载,以防止数据库挂了,不需要数据库的应用也无法使用,最终是web页面无法显示,现在是我的web页面中的无需数据库的界面显示正常,而需要数据库不知道怎么在应用到时,即点击相应的应用时界面正常显示,我的有关数据库的应用如何在点击页面相关的数据库应用时,完成加载,控制层,业务层,dao层都是通过注释将将相应的类映射成bean的,现在是有一个数据源文件(如下),我如何做还能加载数据源,完成这些层的依赖注入,然后进行持久化操作,完成我

android开发查询数据库的实现类和dao层

问题描述 android开发查询数据库的实现类和dao层 之前开发的项目数据单机的吧,现在在公司要开发联网的项目,就用上了数据库,我就要写这前我写的实现类和接口,还有DBHelper,那是我做网站的时候用于查询数据库的,请问做app操作数据库和我之前写的一样么,写个DBHelper,实现类集成接口,增删查改写到实现类里.感觉这流程是不怎么熟悉啊 解决方案 ActiveAndroid 一个andriod DB操作的开源库,很方便 解决方案二: 你用ado比较好点----

博奥新能求救:html中的DIV嵌套一个DIV,怎么让里面的DIV剧中?

问题描述 博奥新能求救:html中的DIV嵌套一个DIV,怎么让里面的DIV剧中? 博奥新能在写代码的时候发现这个问题一直没办法解决,IE和360都不能,所以博奥新能不知道哪里出了问题,请大神帮忙解决一下.谢谢.. 解决方案 div剧中css代码div上下左右剧中 解决方案二: 可以尝试一下: 1.对需要水平居中的DIV层添加以下属性: margin-left: auto; margin-right: auto; 2.主要的样式定义如下: body {TEXT-ALIGN: center;} #

Unitils+hibernate+Spring+PostgreSql做dao层测试遇到的错误

这两天看陈雄华的书<Spring3.0企业开发实战>17章做dao层的测试,由于使用postgreSql数据库,所以遇到了不少错误,很多问题百度都没找到答案,所以记录下来给遇到同样错误的童鞋做个参考.下面是我遇到的问题: 1.unitils目前还不支持Hibernate4,所以使用hibernate4的童鞋,要么换hibernate3要么自己用dbUnit做测试. 2.org.unitils.core.UnitilsException: Missing configuration for or

Spring配置事务在DAO层和业务逻辑层

Spring通过AOP实现声明式事务管理.通常通过TransactionProxyFactoryBean设置Spring事务代理.我们需要一个目标对象包装在事务代理中.这个目标对象一般是一个普通Java对象的bean.当我们定义TransactionProxyFactoryBean时,必须提供一个相关的 PlatformTransactionManager的引用和事务属性. 事务属性含有上面描述的事务定义. PlatformTransactionManager: HibernateTransac

Spring+Hibernate实现的DAO层公共类

此EntityDao接口与EntityDaoImpl实现类,可取代了我们平时写的UserDao,NewsDao,CompanyDao等等,可直接供Service层调用.其中实现类的代码如下: /** * Copyright 2009-1012 the original author or authors. * My Blog site: http://www.blogjava.net/rongxh7 */ package rong.common.dao; import java.io.Seria