首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > 高性能WEB开发 >

SSH架构,dao层是不是一定要是单例模式

2014-01-22 
SSH架构,dao层是否一定要是单例模式。[/code][解决办法]单例跟单线程没有关系的,这点你估计是搞混了。Action

SSH架构,dao层是否一定要是单例模式。
[/code]
[解决办法]
单例跟单线程没有关系的,这点你估计是搞混了。
ActionServlet也是单例的(高版本的好象不是了),按你的想法用了struts就是只有一个连接了?
[解决办法]

引用:
dao层为单例,该应用有30个表,那么,就是只有30个dao的实例在内存中,每个dao实例同时最多占用一个数据库连接。也就是说,不管web应用并发了多少个数据库请求(肯定都是由dao发出的),那么最多也只能同时并发30个数据库请求。假设我的数据库可以抗住300个并发,那也是没有意义的。这样显然是不合理的啊。我哪里理解错了?


如4楼所说,你确实总体上就理解错了。

刨除线程跟单例(实例)的问题,你对DAO、表、数据库连接的概念也混乱了点。

即便只有1张表,那么你只需要定义一个Dao类,而且系统中只有1个Dao实例,你也可以同时有300个数据库连接在处理中。
即便你有10张表,你也可以只定义一个Dao类(不是VO类),系统中也可以只有1个Dao实例,你还是可以同时又300个数据库连接在处理中。

找本书看看吧,我一直主张:如果在基础框架性知识结构中存在不足的话,应该看书以系统性的掌握。
[解决办法]
一个实例和并发性没有多少关系,楼主总是想一个实例的方法就只能有一个业务层对象调用。有多少并发这个对象的这个方法就会有多少个调用。假设启动30个线程同时调用一个对象的同一个方法,这种情况按楼主错误的理解就是只能串行访问了。
[解决办法]
“既然dao层为单例,那么是不是每一个dao,有且只有一个实例,每一个实例只占用一个数据库连接,”
你对单利理解有误,或者说java方法的执行理解有误;
请问你如何获取connection?
假如是-getconnection();那么无论是否单利,每执行一次都会创建一个connection连接;

单利是用来就是用来节省内存的

热点排行