迅雷的一道Java面试题~ 直接在JSP里用JDBC,可以让页面里的多个操作共享一个Connection;而用Hibernate则每个页面操作都需要一个Connection。能不能从设计的角度谈下这个问题?即为什么Hibernate要这样设计? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用一个connection,多线程并发时容易产生脏数据吧 我觉的每个页面操作都需要一个Connection,是从数据库角度来做的每个页面一个Connection,不用的时候直接关闭这个Connection,而不影响其他的Connection,释放了资源。如果页面里的多个操作共享一个Connection,这会让Connection很长时间不能够得到关闭,大大的浪费的资源 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 连接池的问题吧 hibernate这样做可以自己管理自己的connection 对开发者透明 而jsp共享Connection 性能上不太好 而且hibernate 可以更好的进行控制事务 每次操作的时候,一个Connection同时只能有一个Transaction,So,其实,你不管Transaction,不管脏数据的时候,一个Connection可以被共享。So,Hibernate这样做。 Hibernate真的每个页面操作都需要一个Connection?深表怀疑,不会是诈你的吧? 页面怎么和connection混到一起讨论了?hibernate是一个线程用一个connection这样设计好处很显然:不会出现多线程并发,比如这边正操作呢,那边connection关闭了。还可以做到connection在当前线程中重用,比如对数据进行各种增删改查操作,都是用一个connection 一个页面一个connection更有利于资源的合理运用,需要的时候就打开,不用的时候就关闭,纯属个人观点~ Hibernate是有连接池的,所以Connection应该本身就是重复利用的。所以不会因为新的Connection而消耗多余资源。而及时关闭,可以有利于Connection的共用。因为连接池内的连接被占用光了,肯定要去建新链接的。JDBC里面每开一个Connection都需要消耗不少资源,所以要共用。 Hibernate,有缓存?关闭连接才能清除?清除以后才能显示最新数据?e... 这一个页面中的缓存中的数据共享起来了。 貌似Spring的opensessioninview 可能是hibernate有延迟加载,提高性能的问题吧 这个跟HIBERNATE没啥关系把在页面上创建Connection 违反mvc分层原则,页面端也做了持久层的工作了。但尽量少创建Connection是绝对有必要的,比较链接资源是很宝贵的。可以做数据库池,和后端程序来控制Connection的个数 這證明 hibernaer 在用 連接池 。 其实这种说法也不是很正常,hibernate的一个session是和一个connection联系在一起的,但不代表每一个页面都需要一个connection也就是一个session。至于为什么不像jsp一样共用一个connection,我曾经开发的程序就是这样的,但会出现一个瓶颈,那就是多人同时访问的时候,conncetion根本不够用,也就是没得急处理完一个请求,而另一或多个请求也来了的时候(并发),如果同步处理不当,很容易造成请求处理不全,或是脏数据。这是我以前的一点经验,望多多指教。 但是每次都创建一个Connection的话就更占用资源了撒 多个jsp页面同时访问一个Connection,长时间得不到关闭,资源得不到释放。如果多个多个用户连接不释放,数据库的连接数有一定的数量限制,数据库就会Down掉.正常Conncetion是不允许声明成static的就是怕数据库down掉. 恩~首先感谢大家对这个问题的关注及解答。在参考了2 9 12 23 30 59楼的解答并查阅了相关资料后个人觉得答案可能是这个:JSP页面是单实例多线程访问,即只产生一个实例,但对于每个用户访问都会产生一个线程。如果JSP中所有操作共用一个Connection,当多个用户多线程访问该JSP不同方法时如果不进行很好的同步则可能会出现问题(Connection本身也不是线程安全的)。而Hibernate每个操作方法一个Connection,则无须考虑方法之间的同步问题,虽然创建Connection是一个蛮耗费资源的工作,但Hibernate里使用了连接池可以重用Connection从而可以较好的解决资源消耗问题。不知大家还有没更好的解答? 延迟加载 感觉只有这个说法 因为单例模式 增加了速度 而没有考虑服务器的承受度 如果 每个用户每个页面操作都需要一个Connection 大大减小了 服务器的承受度 给服务器争取了时间 我不认同你这说法,一个jsp页面,相当于是一个servlet,大家都知道servlet是线程不安全的,但是你在jsp页面中打开的connection,执行的数据库操作,编译成servlet的时候,是在servlet的execute方法里面执行的,这个应该就没有多线程的问题了,至于你说的连接池的问题,这个和直接在jsp中用connection和hibernate应该没太大的关系,两种都可以从连接池里面取connection,另外hibernate通过借助ThreadLocal保证一个线程共用一个connection啊,可能我理解的有误啊,请大家指点! 都没用过Hibernate,就用过一点Spring.学习一下。顶 这个应该跟hibernate连接池有关吧 从题目来看,JSP里面用JDBC,应该是没有用到连接池,所以是可以共享一个Connection,但是对事务的控制不好;Hibernate肯定是用到了连接池,可以控制连接数,这样可以很好的控制事务。 获取 xmlHttp.responseText乱码问题,高手指点下 事件触发 电信运营计费管理系统 求站内搜索源代吗!!!! jsp+servlet传递参数的问题啊! hibernate反向工程问题 ssh学习的视频例题资料 在linux上怎么起动eclipse 有关tomcat的问题 关于出错的问题? 求解●●●关于TOMCAT SSL单双向认证分模块配置●●● 怎么配置tomcat部署目录下的某个文件夹使用到 https协议
每个页面一个Connection,不用的时候直接关闭这个Connection,而不影响其他的Connection,释放了资源。
如果页面里的多个操作共享一个Connection,这会让Connection很长时间不能够得到关闭,大大的浪费的资源
一个Connection同时只能有一个Transaction,
So,其实,你不管Transaction,不管脏数据的时候,一个Connection可以被共享。
So,Hibernate这样做。
深表怀疑,不会是诈你的吧?
还可以做到connection在当前线程中重用,比如对数据进行各种增删改查操作,都是用一个connection
,纯属个人观点~
清除以后才能显示最新数据?
e...
貌似Spring的opensessioninview
這證明 hibernaer 在用 連接池 。
如果多个多个用户连接不释放,数据库的连接数有一定的数量限制,数据库就会Down掉.正常Conncetion是不允许声明成static的就是怕数据库down掉.
JSP页面是单实例多线程访问,即只产生一个实例,但对于每个用户访问都会产生一个线程。如果JSP中所有操作共用一个Connection,当多个用户多线程访问该JSP不同方法时如果不进行很好的同步则可能会出现问题(Connection本身也不是线程安全的)。而Hibernate每个操作方法一个Connection,则无须考虑方法之间的同步问题,虽然创建Connection是一个蛮耗费资源的工作,但Hibernate里使用了连接池可以重用Connection从而可以较好的解决资源消耗问题。
不知大家还有没更好的解答?
如果 每个用户每个页面操作都需要一个Connection 大大减小了 服务器的承受度 给服务器争取了时间
我不认同你这说法,一个jsp页面,相当于是一个servlet,大家都知道servlet是线程不安全的,但是你在jsp页面中打开的connection,执行的数据库操作,编译成servlet的时候,是在servlet的execute方法里面执行的,这个应该就没有多线程的问题了,至于你说的连接池的问题,这个和直接在jsp中用connection和hibernate应该没太大的关系,两种都可以从连接池里面取connection,另外hibernate通过借助ThreadLocal保证一个线程共用一个connection啊,可能我理解的有误啊,请大家指点!
学习一下。顶
从题目来看,JSP里面用JDBC,应该是没有用到连接池,所以是可以共享一个Connection,但是对事务的控制不好;Hibernate肯定是用到了连接池,可以控制连接数,这样可以很好的控制事务。