有一段spring源码看不懂懂 ,求解

想说说自己Spring的学习路程,课余自学Spring将近一年了,还是不得其道。去年暑假学习了一下JSP,并没有深入理解,所以导致学习Spring时对着书本写一些demo,感觉自己理解了,其实并不知道内部时什么原理,出了问题不停的百度,一个小问题好几天解决不了。&br&
学习一种框架最先需要知道的是为什么需要使用这个框架,任何一个框架的发明都是为了解决编程中的一些痛点,打开任何一本hibernate或者其他框架的入门书,第一章都是介绍框架的理念和优势。如果需要理解这些理念和优势,那么你需要知道不使用这个框架之前是怎么处理的,才能知道框架做了一些什么事情。&br&
针对Spring的学习,第一步就是理解IoC和AOP;这是基础;然后学习SpringMVC,其实还是Java EE开发,如果要理解这个框架,就要知道没有这个框架之前,使用的是什么技术。&br&&blockquote&很多新的技术只不过是引入了新的编程元素对原来技术进行了封装。&br&&/blockquote&
Web开发,首先需要理解的是 HTTP协议,这部分一定要深入理解。理解http请求,其实就是要知道下面这张图的含义。&br&&img src=&/bfb576a894fbc_b.jpg& data-rawwidth=&800& data-rawheight=&228& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/bfb576a894fbc_r.jpg&&&br&还要知道服务器发送给浏览器的响应是没有没有JS,CSS和图片等外部资源的,浏览器在解析响应时才会再次请求这些资源,&b&这里会出现一些静态资源请求不到的问题,SpringMVC是怎么配置的?&/b&&br&
接下来,学习Servlet和JSP。这个步骤不是可以跳过的,现在流行的框架Spring MVC和Struts2其实都是基于Servlet的,只有深入理解了Servlet才能理解后面的新技术。&br&下面几个知识点可以检测你是否理解了Servlet:&br&1、什么是ServletContext,和tomcat等web容器的关系时什么?&a href=&///?target=http%3A///developerworks/cn/java/j-lo-servlet/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Servlet 工作原理解析&i class=&icon-external&&&/i&&/a&&br&简单的说,我们在浏览器点击链接和按钮产生的消息不是发送给Servlet的,而是发送给web容器的(在JSP出现之前,web容器也叫Servlet容器),web容器接收消息后不知道怎么处理,转交给我们编写的Servlet处理,那么web容器怎么和Servlet交流呢?于是就出现了Servlet接口,&b&接口是定义一种规范的良好表达形式。&/b& 只要我们编写的Java类符合Servlet规范,那么就能被Web容器识别并被容器管理。&br&2、什么是Session?Session在实际工程中的应用场景。以及@SessionAttribute注解的局限性。&br&3、&b&JSP是面向服务器的&/b&,它并不知道浏览器是什么鬼,是我们在写JSP时预设客户端是浏览器,&b&JSP就是一个Servlet。JSP的常用对象和指令。&/b&&br&4、JSP的中文编码乱码有几种情况?各自的解决方法?提示: JSP文件的编码,浏览器的解析编码,GET请求的编码,POST的编码。&br&5、Servlet是一种接口规范,其中请求和响应是Servlet容器通过向方法的参数赋值HttpServletRequest或者HttpServletResponse传递的。在Struts1里面,将doGet()方法里的响应移到返回值里。在Struts2里则:&br&&blockquote&&ul&&li&在Controller中彻底杜绝引入HttpServletRequest或者HttpServletResponse这样的原生Servlet对象。&/li&&li&同时将请求参数和响应数据都从响应方法中剥离到了Controller中的属性变量。&/li&&/ul&&/blockquote&这是一个很大的技术改造,也造成了Struts2的盛行。Spring MVC走的是中间路线,Spring的2.0.8之前的版本甚至直接使用Servlet的doGet的。Spring MVC现在开始流行主要还是因为Schema xml的精简和基于注解的配置。所以这里出现了新的知识点:Schema Based XML的相关知识和Java5引入的注解原理。&br&参考文献:&br&&a href=&///?target=http%3A///blogs/subjects/springmvc-explore& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&博客专栏 - SpringMVC深度探险&i class=&icon-external&&&/i&&/a&&br&强烈推荐看两遍。&br&还有关于Spring 容器和MVC容器的关系,这里有一篇很好的介绍:&br&&a href=&///?target=http%3A//blog.arganzheng.me/posts/spring-and-web-mvc-integration-web-application-context.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spring与web MVC的整合——Spring的应用上下文管理&i class=&icon-external&&&/i&&/a&&br&书籍:推荐许令波的书《深入分析Java Web技术内幕(修订版)》和计文柯的《深入理解spring技术内幕》,特别是第二本,对spring的分析很是彻底。&br&&br&&br&
查看源码是比较快的学习方法,在一个项目里直接利用debug的方式追踪变量查看源码,而不是去阅读源码。&br&如何使用eclipse的debug:&a href=&///?target=http%3A//blog.csdn.net/jackpk/article/details/7655777& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&★ Eclipse Debug 界面应用详解——Eclipse Debug不为人知的秘密&i class=&icon-external&&&/i&&/a&&br&简单说下步骤:新建一个maven web项目,将需要的依赖都添加到pom中去,在pom文件夹中打开终端,运行&mvn dependency:sources&就可以下载所有pom中依赖的源码。如果是eclipse,选中项目,右键 run as 选择 maven build... ,在goal中填入“dependency:sources”,没有mvn。接着简单写一个mvc项目。假设有一个如下的handler method:我们在方法的第一行打一个断点,进行调试 。&br&&div class=&highlight&&&pre&&code class=&language-java&&
&span class=&nd&&@RequestMapping&/span&&span class=&o&&(&/span&&span class=&s&&&/&&/span&&span class=&o&&)&/span&
&span class=&kd&&public&/span& &span class=&n&&ModelAndView&/span& &span class=&nf&&indexHandler&/span&&span class=&o&&(){&/span&
&span class=&n&&ModelAndView&/span& &span class=&n&&mv&/span&&span class=&o&&=&/span&&span class=&k&&new&/span& &span class=&n&&ModelAndView&/span&&span class=&o&&(&/span&&span class=&s&&&success&&/span&&span class=&o&&);&/span&
&span class=&n&&mv&/span&&span class=&o&&.&/span&&span class=&na&&addObject&/span&&span class=&o&&(&/span&&span class=&s&&&key&&/span&&span class=&o&&,&/span& &span class=&s&&&hello,hsiung!&&/span&&span class=&o&&);&/span&
&span class=&n&&mv&/span&&span class=&o&&.&/span&&span class=&na&&addObject&/span&&span class=&o&&(&/span&&span class=&s&&&time&&/span&&span class=&o&&,&/span& &span class=&k&&new&/span& &span class=&n&&Date&/span&&span class=&o&&());&/span&
&span class=&k&&return&/span& &span class=&n&&mv&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&br&一步一步往下看,可以在outline的窗口清楚地看到ModelAndView的属性和方法,可以看到ModelAndView有两个属性很重要,一个是view:O一个是model:ModelMap,接着可以看到上面方法的第二行调用的是如下代码:&br&&div class=&highlight&&&pre&&code class=&language-text&&public ModelAndView addObject(String attributeName, Object attributeValue) {
getModelMap().addAttribute(attributeName, attributeValue);
&/code&&/pre&&/div&所以model中实际使用的是ModelMap这个类,那这个类的结构是什么呢?按住Ctrl再单击ModelMap,就可以看到其实就是一个LinkedHashMap&String, Object&。&br&
&br&&br&---------------------没想到有人看,修改了了一下错别字和细节 -----------------&br&&br&关于demo,其实spring project提供了一些很好的MVC demo,&br&&a href=&///?target=http%3A///spring-projects/spring-mvc-showcase& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&spring-projects/spring-mvc-showcase · GitHub&i class=&icon-external&&&/i&&/a&,&br&&a href=&///?target=https%3A///spring-projects/spring-petclinic& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&spring-projects/spring-petclinic · GitHub&i class=&icon-external&&&/i&&/a&。&br&下载源码,到pom目录下打开终端 运行: mvn eclipse:eclipse ,构建成功后直接导入eclipse就可以运行查看效果了。注意,mvn 命令经常一次不能成功,主要是有些maven插件下载失败以及国内网络的问题,手动删除下载失败的依赖,然后命令多运行几次就可以成功了。也可以使用开源中国的maven源。&br&&br&-------------------------------------广告---------------------------------&br&开始学习java了,欠下的总是要还的,记录了一些java笔记,有些是转载别人的,但是都是认为比较好的博客。&br&&a href=&///?target=https%3A///cexowengui/Java-note/wiki& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Home · cexowengui/Java-note Wiki · GitHub&i class=&icon-external&&&/i&&/a&&br&觉得可以的话可以给个star,或者在issue批评,让我嘚瑟下,有什么问题也可以在issue提,我也是新手,大家一块进步。
想说说自己Spring的学习路程,课余自学Spring将近一年了,还是不得其道。去年暑假学习了一下JSP,并没有深入理解,所以导致学习Spring时对着书本写一些demo,感觉自己理解了,其实并不知道内部时什么原理,出了问题不停的百度,一个小问题好几天解决不了。 …
好吧, 我是开发Hibernate的 (见 &a href=&///?target=https%3A///stliu& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&stliu (Strong Liu) 路 GitHub&i class=&icon-external&&&/i&&/a& ) , 现在的4.x的版本里面大部分代码是我写的, 现在我也在带着个团队在开发一个基于JAVA EE 7 的项目, 团队里面的人基本上对java都不是很了解, 可以说刚刚入门, 所以应该说比较符合题主的情况吧....&br&&br&我带团队的方法基本上是让他们自己去看文档, 自己去网上找资料, 来实现功能, 然后对这他们的代码问为什么, 为什么这个配置要这样写, 为什么这个ManyToOne要设置成lazy的, 如果不设置成这样会怎样, 不知道? okay, 那就改成eager的跑一边, 看看log&br&&br&其实, 学习什么都是一样的, 先入门, 会做了, 然后搞懂为什么要这么做, 最忌讳的是, 遇到个问题, 在网上搜索搜索, 别人说把这个设置改成A, 你改成了A, 咦, 确实好使了, 然后就这样过去了, 以后遇到啥问题都改成A&br&&br&还是要搞懂, 你实现一个方法的时候, 是希望执行一个多表级联查询, 还是单表查询, 还是执行一个批处理, 然后再用工具去实现你的想法&br&&br&具体到hibernate的入门, 我觉得, 首先还是先要学会数据库, jdbc, 设计模式, 这些都是基础, 并不是说有了hibernate就不需要了解这些了, 相反, 只有知道了只写, 才能够使用起hibernate来得心应手&br&&br&从小的项目开始, 一点点的了解为什么一个框架会这样设计, 在什么情况下使用这个功能, 在什么情况下不应该使用这个功能&br&&br&路漫漫啊.... :)&br&&br&--------------------------------------------------------&br&&br&最后, 推荐 &a href=&///?target=http%3A///subject/1854431/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java Persistence with Hibernate (豆瓣)&i class=&icon-external&&&/i&&/a&
好吧, 我是开发Hibernate的 (见
) , 现在的4.x的版本里面大部分代码是我写的, 现在我也在带着个团队在开发一个基于JAVA EE 7 的项目, 团队里面的人基本上对java都不是很了解, 可以说刚刚入门, 所以应该说比较符合题主的情况吧…
1、开发对比开发速度&p&Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。&/p&开发社区&p&Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快,当前最高版本4.1.8。而Mybatis相对平静,工具较少,当前最高版本3.2。&/p&开发工作量&p&Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。&/p&&p&针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。&/p&2、系统调优对比Hibernate的调优方案&ol&&li&制定合理的缓存策略;&/li&&li&尽量使用延迟加载特性;&/li&&li&采用合理的Session管理机制;&/li&&li&使用批量抓取,设定合理的批处理参数(batch_size);&/li&&li&进行合理的O/R映射设计&/li&&/ol&Mybatis调优方案&p&MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。MyBatis同样具有二级缓存机制。 MyBatis可以进行详细的SQL优化设计。&/p&SQL优化方面&p&Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。&/p&&p&Hibernate HQL语句的调优需要将SQL打印出来,而Hibernate的SQL被很多人嫌弃因为太丑了。MyBatis的SQL是自己手动写的所以调整方便。但Hibernate具有自己的日志统计。Mybatis本身不带日志统计,使用Log4j进行日志记录。&/p&扩展性方面&p&Hibernate与具体数据库的关联只需在XML文件中配置即可,所有的HQL语句与具体使用的数据库无关,移植性很好。MyBatis项目中所有的SQL语句都是依赖所用的数据库的,所以不同数据库类型的支持不好。&/p&3、对象管理与抓取策略对象管理&p&Hibernate 是完整的对象/关系映射解决方案,它提供了对象状态管理(state management)的功能,使开发者不再需要理会底层数据库系统的细节。也就是说,相对于常见的 JDBC/SQL 持久层方案中需要管理 SQL 语句,Hibernate采用了更自然的面向对象的视角来持久化 Java 应用中的数据。&/p&&p&换句话说,使用 Hibernate 的开发者应该总是关注对象的状态(state),不必考虑 SQL 语句的执行。这部分细节已经由 Hibernate 掌管妥当,只有开发者在进行系统性能调优的时候才需要进行了解。&/p&&p&而MyBatis在这一块没有文档说明,用户需要对对象自己进行详细的管理。&/p&抓取策略&p&Hibernate对实体关联对象的抓取有着良好的机制。对于每一个关联关系都可以详细地设置是否延迟加载,并且提供关联抓取、查询抓取、子查询抓取、批量抓取四种模式。 它是详细配置和处理的。&/p&&p&而Mybatis的延迟加载是全局配置的。&/p&4、缓存机制对比Hibernate缓存&p&Hibernate一级缓存是Session缓存,利用好一级缓存就需要对Session的生命周期进行管理好。建议在一个Action操作中使用一个Session。一级缓存需要对Session进行严格管理。&/p&&p&Hibernate二级缓存是SessionFactory级的缓存。 SessionFactory的缓存分为内置缓存和外置缓存。内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定SQL语句等),对于应用程序来说,它是只读的。外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备。二级缓存称为进程级缓存或SessionFactory级缓存,它可以被所有session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。&/p&&p&5、优势对比&/p&Mybatis优势&ul&&li&MyBatis可以进行更为细致的SQL优化,可以减少查询字段。&/li&&li&MyBatis容易掌握,而Hibernate门槛较高。&/li&&/ul&Hibernate优势&ul&&li&Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。&/li&&li&Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。&/li&&li&Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。&/li&&li&Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。&/li&&/ul&&p&来源:麦子学院&/p&
1、开发对比开发速度Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。开发社区Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹…
SSH框架一般指的是Struts、Spring、Hibernate,后来Struts2代替了Struts。最近5年,Struts2已经被Spring MVC代替,而Hibernate基本也被iBatis/MyBatis代替。&br&&br&所以你真正需要了解的是Spring,Spring你需要了解两个概念AOP和IOC,更进一步就是Spring的核心技术“动态代理”。&br&&br&持久层框架看看Hibernate/iBatis/MyBatis,研究一下Spring的数据库事务管理,各个持久层框架式如何实现ORM的,了解至少一种缓存框架,知道什么是数据库连接池。和数据库的交互最核心的不是ORM,而是掌握和数据库相关的能力,比如数据库编程、SQL优化、对范式的理解。&br&&br&MVC框架Struts2和Spring MVC,你需要知道他们在web.xml文件里配置了一些什么,Struts2/Spring MVC接到前台请求之后经过哪些步骤之后转到Action/Controller,return之后Struts2/Spring MVC又作了些什么。还有就是Filter、Listener和Struts2/Spring MVC的拦截器各有什么特点,适合处理什么样的问题。
SSH框架一般指的是Struts、Spring、Hibernate,后来Struts2代替了Struts。最近5年,Struts2已经被Spring MVC代替,而Hibernate基本也被iBatis/MyBatis代替。所以你真正需要了解的是Spring,Spring你需要了解两个概念AOP和IOC,更进一步就是Spring的核心技术…
来自子话题:
我感觉你要的答案是java web开发后台框架有那些吧?&br&&p&对于java web开发框架,主要有:&/p&&p&&b&1.S2SH(struts2+spring+hibernate)&/b&&/p&&p&&a href=&///?target=http%3A///share/1680.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&基于Struts2+Spring3+Hibernate4开发java Web企业应用开源框架s2jh源码分享&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/5552.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&spring+hibernate+struts2开发OA企业办公管理系统源码分享&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/8592.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Struts2+Hibernate3+Spring三大框架技术实现MySQL数据分页&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/8448.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spring+struts2+hibernate+easyui基础权限管理框架&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/5888.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spring+Struts2+Hibernate三大框架开发企业人力资源管理系统源代码下载&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/0736.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spring mvc+struts2+Hibernate整合实例代码(注解详解)&i class=&icon-external&&&/i&&/a&&/p&&p&&b&2.S2SM(struts2+spring+mybatis)&/b&&/p&&p&&a href=&///?target=http%3A///share/6928.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spring+Struts2+mybatis手动配置三大框架整合源代码下载&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/6736.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Struts2+mybatis开发音乐分享系统&i class=&icon-external&&&/i&&/a&&/p&&p&&b&3.SSH(spring mvc+spring+hibernate或struts+spring+hibernate)&/b&&/p&&p&&a href=&///?target=http%3A///share/7344.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spring MVC+Spring+Hibrenarte实现的简单的CRUD项目实例&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/0544.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&springMVC注解与hibernate完美结合完成基本的增删改查demo源码下载&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/8480.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&springmvc+hibernate+spring+easyui开发bsalse进销存后台管理系统源代码下载&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/0752.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&spring 3.0+spring MVC+Hibernate框架搭建教程(附:springMVC文件上传功能)&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/3216.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&spring+struts2+Hibernate三大框架开发某制药厂管理系统源代码下载&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/0736.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spring mvc+struts2+Hibernate整合实例代码(注解详解)&i class=&icon-external&&&/i&&/a&&/p&&p&&b&4.SSM(spring mvc+spring+mybatis)&/b&&/p&&p&&a href=&///?target=http%3A///share/9888.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SpringMVC+Mybatis整合实现简单权限控制系统代码&i class=&icon-external&&&/i&&/a&&/p&&p&&b&5.JSJ(javabean+servlet+jsp)&/b&&/p&&p&&a href=&///?target=http%3A///share/1920.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&jsp+servlet+javabean编写的一个java开源免费简易电子商城系统源码,适合初学者&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/8688.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JSP Servlet开发博客天空源代码下载&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///share/6576.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JSP+servlet开发在线投票统计管理系统源代码下载&i class=&icon-external&&&/i&&/a&&/p&&br&&p&原文:&a href=&///?target=http%3A///question/0944.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&java做网站开发使用什么框架&i class=&icon-external&&&/i&&/a&&/p&
我感觉你要的答案是java web开发后台框架有那些吧?对于java web开发框架,主要有:1.S2SH(struts2+spring+hibernate)
应楼上那位推荐李钢的渣书的人挑战,那我就大概推荐几本,一路学来,&br&Spring 揭秘,国人良心之作,鼎力推荐,&br&spring in action 适合入门,英语好点可以看原版, in action 之类的书都不错。&br&hibernate
&a class=& wrap external& href=&///?target=http%3A///%25E7%25B2%25BE%25E9%AHibernate-Java%25E5%25AF%25B9%25E8%25B1%25A1%25E6%258C%%25B9%%258C%%258A%%259C%25AF%25E8%25AF%25A6%25E8%25A7%25A3-%25E5%25AD%%258D%25AB%25E7%/dp/B0033PSPDS/ref%3Dsr_1_1%3Fie%3DUTF8%26qid%3D%26sr%3D8-1%26keywords%3Dhibernate& target=&_blank& rel=&nofollow noreferrer&&精通Hibernate:Java对象持久化技术详解&i class=&icon-external&&&/i&&/a& ,hibernate的中文书中最好的,没有之一,&br&&br&Struts 2 Web开发学习实录 不错, 就这样
应楼上那位推荐李钢的渣书的人挑战,那我就大概推荐几本,一路学来,Spring 揭秘,国人良心之作,鼎力推荐,spring in action 适合入门,英语好点可以看原版, in action 之类的书都不错。hibernate
,hibernate的中…
一遍看下来,没看到特别满意的答案,作为mybatis支持者我来写几句。&br&首先是运行速度,hibernate是在jdbc上进行了一次封装,而mybatis基于原生的jdbc,因此mybatis天生就有运行速度上的优势。&br&然后mybatis开放了插件接口。也许mybatis团队知道自己人少力单,索性把很多功能接口都开放了。不好分页?网上大神写的分页插件多得很;需要手写sql?按注解生成自动生成sql的插件早就有了;还有缓存的插件等等。可以说,只要肯在mybatis上花时间,你会发现orm这一块的所有问题它都有解决方案。这方面不是说hibernate不好,但是我还真没听说过hibernate有插件了。&br&还有就是对遗留系统的支持。很多系统在设计之初还没有orm思想,现在想“抢救”一下,用mybatis就比hibernate更合适。因为mybatis可以很容易做到不规范的映射对象和规范的映射对象共存,如果这种系统中再需要增加个需要复杂sql的功能,mybatis只需要把sql手写出来,先把功能运行起来后再看看能不能变成自动生成的sql,而对hibernate来说就很困难了。
一遍看下来,没看到特别满意的答案,作为mybatis支持者我来写几句。首先是运行速度,hibernate是在jdbc上进行了一次封装,而mybatis基于原生的jdbc,因此mybatis天生就有运行速度上的优势。然后mybatis开放了插件接口。也许mybatis团队知道自己人少力单,索…
上面两位朋友已经简单说了REST和ssh的区别,我给你一点关于&公司让我修改他们基于 REST 开发的一个项目,加一下功能,我应该从何下手?&的建议吧。&br&&br&REST是基于HTTP的处理web项目前后台交互的架构(你可以读读英文维基或者中文百度百科的定义)。它给后台的每个service(或者叫resource,简单说就是后台的一个java类,一个方法)都定义了一个独一无二的url。&br&&br&你既然是修改项目,那想必架构已经开发好并且可以用了。你可以用chrome浏览器访问这个项目,打开浏览器上的developer tools--&Network观察你每点一个按钮或者一个link,前台向后台发送了什么request,method类型是什么(GET, POST, DELETE等)。点开一个request,看看Header里面的&Request URL&,&Content-Type&,“Request Payload”分别是什么,看看Response里面的payload是什么。这样你就有了一个基本的了解,比如传输的数据类型用的是xml还是json,url是怎么组成的等等,再根据url的组成去找后台对应的java类以及方法。另外要认真研究后台的这些resource是如何注册到其对应的url的,因为你如果增加新功能的时候涉及到增加新的资源类,显然要知道怎么注册。
上面两位朋友已经简单说了REST和ssh的区别,我给你一点关于"公司让我修改他们基于 REST 开发的一个项目,加一下功能,我应该从何下手?"的建议吧。REST是基于HTTP的处理web项目前后台交互的架构(你可以读读英文维基或者中文百度百科的定义)。它给后台的每…
s2sh搭建java web项目的实例:&br&&a href=&///?target=http%3A///share/7616.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mybatis+Struts2+Spring3环境搭建入门实例下载&i class=&icon-external&&&/i&&/a&&a href=&///?target=http%3A///share/7616.htm& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/share/2310&/span&&span class=&invisible&&.htm&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///share/3984.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&java S2SH项目框架整合搭建实例教程&i class=&icon-external&&&/i&&/a&&a href=&///?target=http%3A///share/3984.htm& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/share/1787&/span&&span class=&invisible&&.htm&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///share/1728.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&java S2SH项目框架Struts2.3+Spring3.1+Hibernate3.6框架搭建整合以及实例demo代码分享&i class=&icon-external&&&/i&&/a&&a href=&///?target=http%3A///share/1728.htm& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/share/1757&/span&&span class=&invisible&&.htm&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///share/3728.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&apache shiro+hibernate4+struts2+spring+easyui+fusioncharts+bootstrap后台权限管理系统搭建&i class=&icon-external&&&/i&&/a&&a href=&///?target=http%3A///share/3728.htm& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/share/2047&/span&&span class=&invisible&&.htm&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&spring mvc搭建java web项目的实例:&br&&a href=&///?target=http%3A///share/3584.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spring MVC入门框架搭建实现用户登录demo教程&i class=&icon-external&&&/i&&/a&&a href=&///?target=http%3A///share/3584.htm& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/share/2279&/span&&span class=&invisible&&.htm&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///share/0752.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&spring 3.0+spring MVC+Hibernate框架搭建教程(附:springMVC文件上传功能)&i class=&icon-external&&&/i&&/a&&a href=&///?target=http%3A///share/0752.htm& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/share/2051&/span&&span class=&invisible&&.htm&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///share/kspringmvc-p1-s1.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&搜索&springmvc&的分享列表&i class=&icon-external&&&/i&&/a&&a href=&///?target=http%3A///share/kspringmvc-p1-s1.htm& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/share/kspr&/span&&span class=&invisible&&ingmvc-p1-s1.htm&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
s2sh搭建java web项目的实例:…
自从离开北大青鸟我就没见有人谈过Java的SSH,说的都是*nix的SSH工具。
自从离开北大青鸟我就没见有人谈过Java的SSH,说的都是*nix的SSH工具。
  Hibernate入门容易,掌握精通我也不敢自夸。我第一遍看Hibernate文档的时候也觉得很吃力,但不是因为Hibernate难掌握而感到吃力,是因为Hibernate文档处处都是持久层设计的经验和最佳实践。 &br&&br&###adv###  Hibernate文档准确的来说,绝大部分内容都在讲对象的持久层设计,而不是简单的Hibernate使用,使用问题查Java doc就够了。所以学习Hibernate,主要是在学习持久层的设计模式,如果你把Hibernate文档都看完了,还整天只会提那些 Hibernate的配置问题,Hibernate的类调用问题,我觉得这样的人还没有真正的入门,算是白学了。&br&&br&  我对Hibernate 的那些配置也不是特别纯熟,每次写hbm,都要对照文档一点点的检查;类调用参数也不太记得,写代码也要Java doc随时备查。&br&&br&  但是我在学习Hibernate的时候即集中所有精力来理解Hibernate的运行原理,集中精力来掌握持久层设计应该把握的原则和技巧,这些才对我是最重用的东西。毫不夸张的说,学习完Hibernate,我对JDBC的编程也提高了一大截,更不要说对于J2EE架构的持久层的框架设计,基本上是了然于胸了,即使将来换了API,不用Hibernate的,改用JDO,Castor什么的,这些经验一样照用。&br&&br&  学习Hibernate主要不是在学习Hibernat怎么配置,用工具怎么生成hbm文件,如果你把重点放在这里,基本上等于白学了Hibernate。Hibernate的精华在于无与伦比的灵巧的对象持久层设计,这些持久层设计经验不会因为你不用Hibernate而丧失掉,我自己学习Hibernate,已经明显感觉到对持久层设计能力已经长了很多经验值了,这些经验甚至不光可以用在Java上,用在.net上也是一样。&br&&br&  所以Hibernate配置的学习,我只是简单看看,用的时候知道到那里去查就行了,一堆复杂的生成工具我根本就看都不去看,这样算下来,掌握Hibernate的配置,可以用Hibernate来替代JDBC写程序,不过花上3天时间就足够了。我想3天时间对你来说不算很奢侈的学习代价吧。   为什么我这么强调学习Hibernate的对象持久层设计理念呢?那就看你的理想是想一辈子做一个程序员呢?还是想向更高的方向发展呢?从纯做技术的角度来说,职业发展的最高点是“系统架构师”,Bill Gates不是还叫做&a class=& wrap external& href=&///?target=http%3A///officesoftware/microsoft/& target=&_blank& rel=&nofollow noreferrer&&微软&i class=&icon-external&&&/i&&/a&的首席系统架构师吗?&br&&br&  System Architect职位需要的是你的学习和领悟能力,如果你不能把学习Hibernate得到的设计经验运用到其它地方,那么你是失败的,也没有资格做 System Architect。&br&&br&  不管JDO也好,Hibernate也好,TopLink也好,CocoBase也好,还是Castor,还是什么Torque,OJB,软件的使用和配置方法可以各异,但本质上都是ORM,都是对JDBC的对象持久层封装,所以万变不离其宗,如果你完整的学习和掌握Hibernate花了1个月的时间,那么你再学习OJB的时间不应该超过1个星期,因为你已经把对象持久层设计都了然于胸了,你需要的只是熟悉一下OJB的API和配置罢了,至于怎么运用OJB进行持久层的开发你早就已经熟悉了。&br&&br&  所以当你掌握了两种以上的ORM,你应该能够不拘于使用的ORM软件的限制,设计出适合于你的项目的持久层来,这才是System Architect的水准。&br&&br&  用金庸小说来打个比方来说吧,张无忌学太极剑,只记剑意,不记剑招,这才是真正的高手,而低手就只会去学习剑招,而不去领会剑招背后蕴含的剑意,所以一辈子都是低手,永远不能真正学会太极剑。所以周颠看到张三丰第二次演示太极剑,招式完全不同就以为是另一套东西,其实本质上都一样。学习Hibernate也不要舍本逐末的去学各种五花八门的工具,重点掌握它的对象持久层设计理念。&br&&a href=&///?target=http%3A///course-867.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hibernate 4.2 入门&i class=&icon-external&&&/i&&/a& 这里有视频,题主可以看一下。
Hibernate入门容易,掌握精通我也不敢自夸。我第一遍看Hibernate文档的时候也觉得很吃力,但不是因为Hibernate难掌握而感到吃力,是因为Hibernate文档处处都是持久层设计的经验和最佳实践。 ###adv### Hibernate文档准确的来说,绝大部分内容都在讲对象的持…
持久化的意思就是把数据找个不是内存的地方存起来,就算你的程序关掉了重新打开,还能读回来,目标不限于XML、二进制文件、数据库、写到服务器上etc。
持久化的意思就是把数据找个不是内存的地方存起来,就算你的程序关掉了重新打开,还能读回来,目标不限于XML、二进制文件、数据库、写到服务器上etc。
1 先纠正下楼主一个观点:做java领域开发ssh没你想象中重要,从目前形势来看大部分项目都会用到Spring,至于Struts(Struts2)和Hibernate通常会有其它一些更适合的框架来代替&br&&br&2 我个人认为学习框架首页要明白,什么是框架,项目中引入框架的目的,引入框架后解决了什么问题。 框架就是针对项目中特点问题做出的一套抽象的复用工具来简化编程开发工作。 从楼主提问看还是学生,没有更多的项目经验,无法体验真实背景下spring的作用觉得spring相关文档很抽象,我建议楼主先做一个不用任何框架的web项目,做完了再找相关资料学习spring(SSH),这时候SSH不一定学的很精,不懂地方可以先跳过,可以先知道怎么应用, 然后用SSH再将这项目重做一遍,深度体会下用SSH和不用SSH的区别,这时候你就可以深刻体会SSH的精华。回头看一些之前不明白的知识点查看相应的手册就可以搞定
1 先纠正下楼主一个观点:做java领域开发ssh没你想象中重要,从目前形势来看大部分项目都会用到Spring,至于Struts(Struts2)和Hibernate通常会有其它一些更适合的框架来代替2 我个人认为学习框架首页要明白,什么是框架,项目中引入框架的目的,引入框架后解…
实际项目开发时,选择一个工具,有如下考量:&br&&ol&&li&是否能够解决实际问题;对于 Hibernate 来说,完成实体和表之间的映射,是其主要功能,其他功能都可以按需选择,并不是说,这个工具有什么功能,就都必须用上,工具的使用向来都是跟着问题走的。&/li&&li&时间成本;面对紧张的时间安排,如果项目组所有成员都要学习 Hibernate 到精通,显然是很浪费时间的,而且 Hibernate 也不是看看视频看看书就可以看到实际运用场景的,实际开发中,很多使用 Hibernate 一两年的人也不是很清楚该怎么使用它提供的高级功能,也没时间和心思去翻官方 manual,那么,大家就会想:这个工具大家都不是很熟练,也没有十足的把握用好,那就只能把它最基本的功能用好算了,也就是,撇开那些高级特性,先用基本功能把活干了再说。&/li&&li&性能;Hibernate 的性能一直饱受诟病,通用工具都难免此类问题,实体加的关联多了,数据加载的就慢,再者,Hibernate 最擅长的并非查询,而是写操作,毕竟是全字段查询,相对来说,JdbcTemplate 就可以指定查询具体哪些字段,自己指定的关联查询 SQL 也比 Hibernate 生成的 SQL 高效简洁,让 JdbcTemplate 负责查询,Hibernate 负责写入,是个不错的搭配。&/li&&li&可维护性;实体关联需要维护,还得控制数据的加载时机(懒加载)、单/双向关系、级联以及抓取策略等,稍微配置不当,就会出现异常,这样的话,与其使用高级功能带来这么多问题,索性干脆不用,省得以后麻烦。&/li&&li&依赖性;项目开发要以数据为核心,数据库修改要灵活轻便,而不依赖于上层工具(如 Hibernate),如果实体添加了太多关联,日后使用其他映射工具或者修改数据库,这些实体就出现问题了,需要对应的修改,毕竟,不是所有工具都像 Hibernate 一样站在对象的角度思考问题的,例如:JOOQ 就提倡 SQL 的使用,反对所有操作都使用 ORM。&/li&&/ol&总之,一句话,开发团队总会选择工具最快最灵活的一面,摒弃他们认为不好的一面。&br&如上,暂时想到这些。
实际项目开发时,选择一个工具,有如下考量:是否能够解决实际问题;对于 Hibernate 来说,完成实体和表之间的映射,是其主要功能,其他功能都可以按需选择,并不是说,这个工具有什么功能,就都必须用上,工具的使用向来都是跟着问题走的。时间成本;面对…
数据的“持久化”(Persistence) 和算法里面的“可持久化”(Persistent) 是不同的概念&br&&br&你看他们词性都不同怎么可能会一样嘛&br&&br&前者你可以认为是保存,大概的感觉是你看内存里面的东西掉个电就没了一点也不持久。硬盘里的东西看起来就持久多了。&br&&br&后者的概念我想你应该很清楚了吧,把每一个历史时刻都记录下来供操作使用。
数据的“持久化”(Persistence) 和算法里面的“可持久化”(Persistent) 是不同的概念你看他们词性都不同怎么可能会一样嘛前者你可以认为是保存,大概的感觉是你看内存里面的东西掉个电就没了一点也不持久。硬盘里的东西看起来就持久多了。后者的概念我…
你需要的不是确保同一张表的SQL操作顺序,而是保证同一个客户发来的SQL请求按顺序执行。
你需要的不是确保同一张表的SQL操作顺序,而是保证同一个客户发来的SQL请求按顺序执行。
SSH(Struts,Spring,Hibernate)是一种常用的Web开发的框架组合,其中Spring作为Ioc容器负责组装,Struts作为前端框架负责展示层逻辑(MVC),Hibernate负责数据的持久化。这三者都是开源框架,也是各自领域中有代表性的框架,三者结合起来是一种最佳实践。&br&&br&而REST是一个C/S(包含B/S)的 软件的架构模式,前端的C(或B)应该以什么样的方式,特别是在HTTP协议上通讯时,和后端的S打交道,形成清晰、容易理解的的交互。由于基于HTTP协议,因此服务端的程序通常跑在Web服务器上,但不一定是以Web方式展现的应用程序。&br&&br&使用SSH框架时,可以依循REST架构模式,以使软件有良好的架构。但是REST不限于 Web开发,特别是在网络服务的API方面,REST已经成为一种事实的标准,可以和Web Service协议栈一争高下。&br&&br&
SSH(Struts,Spring,Hibernate)是一种常用的Web开发的框架组合,其中Spring作为Ioc容器负责组装,Struts作为前端框架负责展示层逻辑(MVC),Hibernate负责数据的持久化。这三者都是开源框架,也是各自领域中有代表性的框架,三者结合起来是一种最佳实践…
Hibernate与MyBatis&p&Hibernate 是当前最流行的O/R mapping框架,它出身于&a href=&///?target=http%3A//sf.net& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&sf.net&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&,现在已经成为Jboss的一部分。 Mybatis 是另外一种优秀的O/R mapping框架。目前属于apache的一个子项目。&/p&&p&MyBatis 参考资料官网:&a href=&///?target=http%3A//www.mybatis.org/core/zh/index.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&mybatis.org/core/zh/ind&/span&&span class=&invisible&&ex.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&Hibernate参考资料: &a href=&///?target=http%3A//docs.jboss.org/hibernate/core/3.6/reference/zh-CN/html_single/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&docs.jboss.org/hibernat&/span&&span class=&invisible&&e/core/3.6/reference/zh-CN/html_single/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&1.1 Hibernate 简介&p&Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。&/p&1.2 MyBatis简介&p&iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。 相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。&/p&第二章 开发对比开发速度&p&Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。&/p&开发社区&p&Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快,当前最高版本4.1.8。而Mybatis相对平静,工具较少,当前最高版本3.2。&/p&开发工作量&p&Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。&/p&&p&针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。&/p&第三章 系统调优对比Hibernate的调优方案&ol&&li&制定合理的缓存策略;&/li&&li&尽量使用延迟加载特性;&/li&&li&采用合理的Session管理机制;&/li&&li&使用批量抓取,设定合理的批处理参数(batch_size);&/li&&li&进行合理的O/R映射设计&/li&&/ol&Mybatis调优方案&p&MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。MyBatis同样具有二级缓存机制。 MyBatis可以进行详细的SQL优化设计。&/p&SQL优化方面&p&Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。&/p&&p&Hibernate HQL语句的调优需要将SQL打印出来,而Hibernate的SQL被很多人嫌弃因为太丑了。MyBatis的SQL是自己手动写的所以调整方便。但Hibernate具有自己的日志统计。Mybatis本身不带日志统计,使用Log4j进行日志记录。&/p&扩展性方面&p&Hibernate与具体数据库的关联只需在XML文件中配置即可,所有的HQL语句与具体使用的数据库无关,移植性很好。MyBatis项目中所有的SQL语句都是依赖所用的数据库的,所以不同数据库类型的支持不好。&/p&第四章 对象管理与抓取策略对象管理&p&Hibernate 是完整的对象/关系映射解决方案,它提供了对象状态管理(state management)的功能,使开发者不再需要理会底层数据库系统的细节。也就是说,相对于常见的 JDBC/SQL 持久层方案中需要管理 SQL 语句,Hibernate采用了更自然的面向对象的视角来持久化 Java 应用中的数据。&/p&&p&换句话说,使用 Hibernate 的开发者应该总是关注对象的状态(state),不必考虑 SQL 语句的执行。这部分细节已经由 Hibernate 掌管妥当,只有开发者在进行系统性能调优的时候才需要进行了解。&/p&&p&而MyBatis在这一块没有文档说明,用户需要对对象自己进行详细的管理。&/p&抓取策略&p&Hibernate对实体关联对象的抓取有着良好的机制。对于每一个关联关系都可以详细地设置是否延迟加载,并且提供关联抓取、查询抓取、子查询抓取、批量抓取四种模式。 它是详细配置和处理的。&/p&&p&而Mybatis的延迟加载是全局配置的。&/p&第五章 缓存机制对比Hibernate缓存&p&Hibernate一级缓存是Session缓存,利用好一级缓存就需要对Session的生命周期进行管理好。建议在一个Action操作中使用一个Session。一级缓存需要对Session进行严格管理。&/p&&p&Hibernate二级缓存是SessionFactory级的缓存。 SessionFactory的缓存分为内置缓存和外置缓存。内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定SQL语句等),对于应用程序来说,它是只读的。外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备。二级缓存称为进程级缓存或SessionFactory级缓存,它可以被所有session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。&/p&MyBatis缓存&p&MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3 中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。&/p&&p&默认情况下是没有开启缓存的,除了局部的 session 缓存,可以增强变现而且处理循环 依赖也是必须的。要开启二级缓存,你需要在你的 SQL 映射文件中添加一行:
&cache/&&/p&&p&字面上看就是这样。这个简单语句的效果如下:&/p&&ol&&li&映射语句文件中的所有 select 语句将会被缓存。&/li&&li&映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。&/li&&li&缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。&/li&&li&根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。&/li&&li&缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。&/li&&li&缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。&/li&&/ol&&p&所有的这些属性都可以通过缓存元素的属性来修改。&/p&&p&比如: &cache
eviction=&FIFO&
flushInterval=&60000&
size=&512&
readOnly=&true&/&&/p&&p&这个更高级的配置创建了一个 FIFO 缓存,并每隔 60 秒刷新,存数结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改它们会 导致冲突。可用的收回策略有, 默认的是 LRU:&/p&&ol&&li&LRU – 最近最少使用的:移除最长时间不被使用的对象。&/li&&li&FIFO – 先进先出:按对象进入缓存的顺序来移除它们。&/li&&li&SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。&/li&&li&WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。&/li&&/ol&&p&flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒 形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。&/p&&p&size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的 可用内存资源数目。默认值是1024。&/p&&p&readOnly(只读)属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓 存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存 会返回缓存对象的拷贝(通过序列化) 。这会慢一些,但是安全,因此默认是 false。&/p&相同点&p&Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。&/p&不同点&p&Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。&/p&&p&MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。&/p&两者比较&p&因为Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。&/p&&p&而MyBatis在这一方面,使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。&/p&第六章 Hibernate与Mybatis对比总结两者相同点&ul&&li&Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。&/li&&li&Hibernate和MyBatis都支持JDBC和JTA事务处理。&/li&&/ul&Mybatis优势&ul&&li&MyBatis可以进行更为细致的SQL优化,可以减少查询字段。&/li&&li&MyBatis容易掌握,而Hibernate门槛较高。&/li&&/ul&Hibernate优势&ul&&li&Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。&/li&&li&Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。&/li&&li&Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。&/li&&li&Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。&/li&&/ul&他人总结&ul&&li&Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。 &/li&&li&Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。 &/li&&li&iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。 &/li&&li&iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。&/li&&/ul&原文出处:&a href=&///?target=http%3A//blog.csdn.net/firejuly/article/details/8190229& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hibernate与 MyBatis的比较&i class=&icon-external&&&/i&&/a&
第一章 Hibernate与MyBatisHibernate 是当前最流行的O/R mapping框架,它出身于,现在已经成为Jboss的一部分。 Mybatis 是另外一种优秀的O/R mapping框架。目前属于apache的一个子项目。MyBatis 参考资料官网:Hib…
来自子话题:
&b&开源技术一旦涉及整合,就会互相影响,Spring 和 Hibernate 是个典型。&/b&&br&&br&&b&鉴于 hibernate 实现了 JPA 规范,就不再赘述 JpaDaoSupport、JpaTemplate&/b&&br&&b&下面以 HibernateDaoSupport、HibernateTemplate 为例同时解释。&/b&&br&&br&Spring 提供 HibernateDaoSupport、HibernateTemplate 的初衷是:&br&&ul&&li&提供 common dao operation method (通用数据操作方法),方便快速开发&/li&&ul&&li&你的 dao 可以 extends xxxDaoSupport 获取继承来的便利方法&/li&&li&你的 dao 可以 autowire xxxTemplate 获取注入来的便利方法&/li&&li&以上两种方式本质是相同的&/li&&/ul&&li&管理 hibernate 的 session&/li&&ul&&li&hibernate 3.0.1 之前,并没有提供会话管理方案,所以 &/li&&ul&&li&Spring 不得已在 HibernateDaoSupport、HibernateTemplate 中提供了支持&/li&&li&通过 HibernateDaoSupport、HibernateTemplate 获取到的 session,可以无缝绑定 spring 管理的事务&/li&&/ul&&/ul&&li&对持久层异常自动转化&/li&&ul&&li&虽然 hibernate 将底层异常封装为 HibernateException 实现了大一统,但 Spring 显然是更希望将任何持久层异常(不单单限定于 HibernateException)封装为自己的 DataAccessException 实现大一统&/li&&/ul&&/ul&&b&但是,以上,在 hibernate 3.0.1 出现后,都成了历史。&/b&&br&&br&不负众望,hibernate 在 3.0.1 后实现了&a href=&///?target=https%3A//docs.jboss.org/hibernate/orm/3.3/reference/en/html/architecture.html%23architecture-current-session& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&会话管理&i class=&icon-external&&&/i&&/a&(contextual session),对应地,Spring 在 HibernateDaoSupport、HibernateTemplate 的 javadoc 中也做了如下更新:&br&&img src=&/ac67c34ca929b13853ad_b.png& data-rawwidth=&1073& data-rawheight=&582& class=&origin_image zh-lightbox-thumb& width=&1073& data-original=&/ac67c34ca929b13853ad_r.png&&&br&Spring Reference 中也声明如下:&br&&img src=&/f06db9e775544_b.png& data-rawwidth=&1245& data-rawheight=&362& class=&origin_image zh-lightbox-thumb& width=&1245& data-original=&/f06db9e775544_r.png&&&br&&b&总结一下&/b&,如果使用的是 Hibernate 3.0.1+,现在 Spring 推荐这么做:&br&&ul&&li&Dao 不要再继承 HibernateDaoSupport 或注入 HibernateTemplate,这两个类都已不推荐使用&/li&&li&Dao 应该直接注入 Hibernate 的 SessionFactory&/li&&/ul&这么做的好处是:&br&&ul&&li&Dao 层代码仅依赖于 hibernate api, 但不依赖于 spring api,这样更合理,毕竟 hibernate 才是持久层功能的提供者&/li&&li&Dao 内可以通过 SessionFactory.getCurrentSession() 来进行纯 hibernate 操作,获取到的 Session 也是受管理的(managed),至于管理方案,可以通过如下方式进行配置&/li&&ul&&li&先配置 hibernate ,然后整合到 spring 配置里&/li&&/ul&&/ul&&b&hibernate.cfg.xml&/b&&br&&div class=&highlight&&&pre&&code class=&language-xml&&&span class=&nt&&&hibernate-configuration&&/span&
&span class=&nt&&&session-factory&&/span&
&span class=&c&&&!-- ... --&&/span&
&span class=&c&&&!-- Enable Hibernate's automatic session context management --&&/span&
&span class=&nt&&&property&/span& &span class=&na&&name=&/span&&span class=&s&&&current_session_context_class&&/span&&span class=&nt&&&&/span&thread&span class=&nt&&&/property&&/span&
&span class=&nt&&&/session-factory&&/span&
&span class=&nt&&&/hibernate-configuration&&/span&
&/code&&/pre&&/div&&b&applicationContext.xml&/b&&br&&div class=&highlight&&&pre&&code class=&language-xml&&&span class=&nt&&&bean&/span& &span class=&na&&class=&/span&&span class=&s&&&org.springframework.orm.hibernate3.LocalSessionFactoryBean&&/span&
&span class=&na&&id=&/span&&span class=&s&&&sessionFactory&&/span&&span class=&nt&&&&/span&
&span class=&nt&&&property&/span& &span class=&na&&name=&/span&&span class=&s&&&configLocation&&/span&&span class=&nt&&&&/span&
&span class=&nt&&&value&&/span&classpath:hibernate.cfg.xml&span class=&nt&&&/value&&/span&
&span class=&nt&&&/property&&/span&
&span class=&nt&&&/bean&&/span&
&/code&&/pre&&/div&&br&&ul&&ul&&li&直接配置 Spring 提供的 LocalSessionFactoryBean&/li&&/ul&&/ul&&div class=&highlight&&&pre&&code class=&language-xml&&&span class=&nt&&&bean&/span&
&span class=&na&&id=&/span&&span class=&s&&&sessionFactory&&/span&
&span class=&na&&class=&/span&&span class=&s&&&org.springframework.orm.hibernate4.LocalSessionFactoryBean&&/span& &span class=&nt&&&&/span&
&span class=&nt&&&property&/span& &span class=&na&&name=&/span&&span class=&s&&&hibernateProperties&&/span& &span class=&nt&&&&/span&
&span class=&nt&&&props&&/span&
&span class=&nt&&&prop&/span& &span class=&na&&key=&/span&&span class=&s&&&hibernate.show_sql&&/span&&span class=&nt&&&&/span&true&span class=&nt&&&/prop&&/span&
&span class=&nt&&&prop&/span& &span class=&na&&key=&/span&&span class=&s&&&hibernate.current_session_context_class&&/span&&span class=&nt&&&&/span&thread&span class=&nt&&&/prop&&/span&
&span class=&nt&&&/props&&/span&
&span class=&nt&&&/property&&/span&
&span class=&nt&&&/bean&&/span&
&/code&&/pre&&/div&&br&&b&回到正题,说下题主的问题&/b&&br&&ul&&li&使用 JpaDaoSupport 需要什么jar包?&/li&&/ul&开源技术的整合,依赖问题比较严重,建议使用 maven 进行管理,参考依赖如下:&br&&div class=&highlight&&&pre&&code class=&language-xml&&&span class=&c&&&!--使用 hibernate 实现 JPA--&&/span&
&span class=&nt&&&dependency&&/span&
&span class=&nt&&&groupId&&/span&org.hibernate&span class=&nt&&&/groupId&&/span&
&span class=&nt&&&artifactId&&/span&hibernate-entitymanager&span class=&nt&&&/artifactId&&/span&
&span class=&nt&&&version&&/span&${hibernate.version}&span class=&nt&&&/version&&/span&
&span class=&nt&&&/dependency&&/span&
&span class=&c&&&!--spring 相关依赖--&&/span&
&span class=&nt&&&dependency&&/span&
&span class=&nt&&&groupId&&/span&org.springframework&span class=&nt&&&/groupId&&/span&
&span class=&nt&&&artifactId&&/span&spring-orm&span class=&nt&&&/artifactId&&/span&
&span class=&nt&&&version&&/span&${spring.version}&span class=&nt&&&/version&&/span&
&span class=&nt&&&/dependency&&/span&
&/code&&/pre&&/div&&br&&ul&&li&JpaDaoSupport 和 jdbcDaoSupport 的用法有什么区别&/li&&ul&&li&使用方式&/li&&ul&&li&Spring 提供的 xxxDaoSupport 都是需要&b&继承&/b&来使用的&/li&&li&Spring 提供的 xxxTemplate 都是需要&b&注入&/b&来使用的&/li&&li&xxxDaoSupport、xxxTemplate 本质相同,建议看 xxxDaoSupport 源码&br&&/li&&li&一般来说,组合(注入)优先于继承,即便要用,注入使用比较好&/li&&/ul&&li&使用区别&/li&&ul&&li&JpaDaoSupport 基于 JPA,jdbcDaoSupport 基于 JDBC,用法没有可比性。&br&&/li&&/ul&&/ul&&/ul&&br&&b&书籍推荐&/b&&br&&ul&&li&JPA&/li&&ul&&li&参考书:《Java Persistence with JPA - Daoqi Yang》&/li&&li&搭配 &a href=&///?target=http%3A//docs.jboss.org/hibernate/orm/4.2/manual/en-US/html_single/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hibernate Manual&i class=&icon-external&&&/i&&/a& 做参照&/li&&/ul&&/ul&&img src=&/cb31ddd69ad1b0c4d63fcf2c1038ded0_b.png& data-rawwidth=&1315& data-rawheight=&487& class=&origin_image zh-lightbox-thumb& width=&1315& data-original=&/cb31ddd69ad1b0c4d63fcf2c1038ded0_r.png&&&br&&ul&&li&JDBC + Spring&/li&&ul&&li&参考书:《Just.Spring.Data.Access - Madhusudhan.Konda》&/li&&li&搭配 Spring Reference - &a href=&///?target=https%3A//docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&18. Data access with JDBC&i class=&icon-external&&&/i&&/a&&br&&/li&&/ul&&/ul&&img src=&/a346f373bdc63af69ee55b5_b.png& data-rawwidth=&1273& data-rawheight=&492& class=&origin_image zh-lightbox-thumb& width=&1273& data-original=&/a346f373bdc63af69ee55b5_r.png&&&br&以上,暂时这么多,想到再补充。&br&&br&&b&参考资料:&/b&&br&&ul&&li&&a href=&///?target=http%3A//static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html%23orm-hibernate-straight& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spring Reference
- 13.3.2 Implementing DAOs based on plain Hibernate 3 API&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=https%3A//docs.jboss.org/hibernate/orm/3.3/reference/en/html/architecture.html%23architecture-current-session& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hibernate Manual - 2.5 Contexual Session&i class=&icon-external&&&/i&&/a&&/li&&/ul&&br&&b&此外,也可以参考我的其他回答:&/b&&br&&ul&&li&&a href=&/question//answer/& class=&internal&&会计转行从事IT,如何在一年时间内全职学习?&/a&&/li&&li&&a href=&/question/& class=&internal&&spring有什么缺点吗? - Java EE&/a&&br&&/li&&li&&a href=&/question/& class=&internal&&面试官会问关于spring的哪些问题? - Java&/a&&br&&/li&&li&&a href=&/question/& class=&internal&&hibernate没有维护表间关系的中间表吗? - Java&/a&&br&&/li&&li&更多,可以关注我,随时获取最新回答&/li&&li&&b&JAVA 交流群&/b&,群号:,二维码如下,&b&(非自学勿扰)&/b&&img src=&/266fcaffac3cfe324fdf_b.jpg& class=&content_image&&&/li&&br&&li&&b&关于群的说明:&/b&&br&&/li&&li&长期以来,本群饱受各种&b&培训机构、群宣水军、拿来主义者&/b&侵扰,为保持本群的技术氛围,本群入群方式修改为&b&付费入群&/b&&br&&/li&&li&已经在群内的各位成员,请珍惜这个平台,一旦违反群规总是讨论和 Java 无关话题的,将被清理出群,再次进群,你只能付费,不守规矩是有代价的&br&&/li&&li&新入群的朋友,请先查阅群公告,了解下群规,入群后,欢迎有准备的提问,拒绝拿来主义&br&&/li&&li&入群所需费用,会被充当群费&br&&/li&&li&如果有朋友觉得&b&本群/本篇文章&/b&帮到了你,也可以联系我(Q或知乎私信),为本群捐赠群费,我会在公告里向大家公示数额及用途&br&&/li&&li&群费用途:为大家合购教程、为群续费、由我牵头做一些特定的事情(投票决定)等等&br&&/li&&li&再次重申:培训机构、群宣水军、拿来主义者,请自觉远离&/li&&/ul&&br&&b&写在最后&/b&&br&如果我的回答帮到了你,可以点赞同来支持我,也可以分享让更多需要帮助的人看到。
开源技术一旦涉及整合,就会互相影响,Spring 和 Hibernate 是个典型。鉴于 hibernate 实现了 JPA 规范,就不再赘述 JpaDaoSupport、JpaTemplate下面以 HibernateDaoSupport、HibernateTemplate 为例同时解释。Spring 提供 HibernateDaoSupport、HibernateT…
我没有在项目中实际用过两者,只是大概了解过。 我的印象是: 如果你擅长或者亟需数据库优化,就选Batis;如果数据库方面一般,主要考量在Java层逻辑,就选Hibernate。
我没有在项目中实际用过两者,只是大概了解过。 我的印象是: 如果你擅长或者亟需数据库优化,就选Batis;如果数据库方面一般,主要考量在Java层逻辑,就选Hibernate。
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 网页源代码看不懂 的文章

 

随机推荐