<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IT公司面试手册 &#187; Hibernate</title>
	<atom:link href="http://www.mianwww.com/html/category/it-interview/hibernate/feed" rel="self" type="application/rss+xml" />
	<link>http://www.mianwww.com</link>
	<description></description>
	<lastBuildDate>Wed, 08 Feb 2012 11:48:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>hibernate面试题</title>
		<link>http://www.mianwww.com/html/2012/01/12753.html</link>
		<comments>http://www.mianwww.com/html/2012/01/12753.html#comments</comments>
		<pubDate>Wed, 18 Jan 2012 14:10:18 +0000</pubDate>
		<dc:creator>jim.jin</dc:creator>
				<category><![CDATA[Hibernate]]></category>

		<guid isPermaLink="false">http://www.mianwww.com/?p=12753</guid>
		<description><![CDATA[1．Hibernate的检索方式 答：①导航对象图检索  ②OID检索  ③HQL检索  ④QBC检索  ⑤本地SQL检索 1.导航对象图检索方式。（根据已经加载的对象，导航到其他对象。） 2.OID检索方式。（按照对象的OID来检索对象。） 3.HQL检索方式。（使用面向对象的HQL查询语言。） 4.QBC检索方式。（使用QBC(Qurey By Criteria) API来检索对象。） 5.本地SQL检索方式。（使用本地数据库的SQL查询语句。） &#160; 2． Forward与Global-Forward的区别 答：Forward是根据Action return的值找到对应的JSP页。当多个Action共同return同一个值时，可将这个Forward元素写在Global-Forward中。 3．持久化对象的三种状态，代表含义。 答： 临时状态——刚用new语句创建，未被持久化，不处于session的缓存中。 持久化状态——已经被持久化，处于session的缓存中。 游离态——已经被持久化，但不处于session的缓存中。 4、三种检索策略是什么，分别适用于哪种场合？ 答：立即检索—— 优点：对应用程序完全透明，缺点：select语句数目多。适用：类级别。 延迟检索—— 优点： 由应用程序决定加载哪些对象，可以避免执行多余的select语句以及避免加载不需要访问的对象，节省内存空间，提高检索效率。 缺点： 应用程序如果要访问游离态的代理类实例，必须保证它在持久化时已经被初始化。 适用： 一对多或多对多关联。应用程序不需要立即访问或者根本不会访问的对象。 迫切左外连接检索： 优点：对应用程序完全透明，不管对象处于持久化状态还是游离状态，应用程序都可以方便的从一个对象导航到另一个与它相关联的对象。使用了外连接，select语句数目少。 缺点：可能会加载程序不许要访问的对象。复杂的数据库表连接形象检索性能。 适用：一对一或多对一关联。应用程序需要立即访问的对象。数据库系统具有良好的表连接性能。 4、ORM解决的不匹配问题（域模型与关系模型之间存在的不匹配） 答： 域模型是面向对象的，关系模型是面向关系的。 域模型中有继承关系，关系模型中不能直接表示继承关系。 域模型中有多对多关联关系，关系模型中通过连接表来表示多对多关联关系。 域模型中有双向关联关系，关系模型中只有单向参照关系，而且总是many参照one方。 域模型提倡精粒度模型，关系模型提倡粗粒度模型。 5、映射继承关系的三种方式？P 424 答：（1）继承关系树的每个具体类对应一张表：在具体类对应的表中，不仅包含和具体类属性对应的字段，还包括与具体类的父类属性对应的字段。 （2）继承关系树的根类对应一张表：在根类对应的表中，不仅包括根类属性对应的字段， 还包括根类的所有子类属性对应的字段。 （3）继承关系树中的每个类对应一张表，每个表中只包括和这个类本身属性对应的字段，子类的表参照父类对应的表。 6、Session的find()方法以及Query接口的区别。 答案Session类的find()方法以及Query接口都支持HQL检索方式。这两者的区别在于，前者只是执行一些简单HQL查询语句的便捷方法，它不具有动态绑定参数的功能，而且在Hibernate3.x版本中，已经淘汰了find()方法；而Query接口才是真正的HQL查询接口，它提供了以上列出的各种查询功能。 7．Hibernate的配置文件(hibernate.properties)中 hibernate.show_sql=true/flase [...]]]></description>
		<wfw:commentRss>http://www.mianwww.com/html/2012/01/12753.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>谈谈你对hibernate与ibatis的认识!</title>
		<link>http://www.mianwww.com/html/2011/11/12311.html</link>
		<comments>http://www.mianwww.com/html/2011/11/12311.html#comments</comments>
		<pubDate>Sun, 27 Nov 2011 11:42:09 +0000</pubDate>
		<dc:creator>jim.jin</dc:creator>
				<category><![CDATA[Hibernate]]></category>

		<guid isPermaLink="false">http://www.mianwww.com/?p=12311</guid>
		<description><![CDATA[可以从hibernate以及ibatis各自的特点，优缺点谈起，谈一些自己的认识，在没有特别说服力的情况下，你最好倾向于面试公司所采用的框架 IBATIS: iBATIS一词来源于“internet”和“abatis”的组合，是一个由Clinton Begin在2001年发起的开放源代码项目，最初侧重于密码软件的开发，现在是一个基于Java的持久层框架。 iBATIS提供的持久层框架包括SQL Maps和Data Access Objects（DAO），同时还提供一个利用这个框架开发的JPetStore实例，相对Hibernate和Apache OJB等“一站式”ORM解决方案而言，ibatis 是一种“半自动化”的ORM实现，iBATIS需要开发人员自己来写sql语句，这可以增加了程序的灵活性，在一定程度上可以作为ORM的一种补充，程序设计人员应该结合自己的项目的实际情况，来选择使用不同的策略。 iBATIS和Hibernate都做了映射，但iBATIS是把实体类和sql语句之间建立了映射关系，这种策略可以允许开发人员自己来写合适的sql语句，而Hibernate在实体类和数据库之间建立了映射关系，sql对于开发人员是不可见的，对于那些数据量非常大的应用，无法去优化sql语句。 所谓“半自动”，可能理解上有点生涩,纵观目前主流的ORM，无论Hibernate还是Apache OJB，都对数据库结构提供了较为完整的封装，提供了从POJO到数据库表的全套映射机制,程序员往往只需定义好了POJO到数据库表的映射关系，即可通过 Hibernate或者 OJB 提供的方法完成持久层操作,程序员甚至不需要对 SQL 的熟练掌握， Hibernate/OJB 会根据制定的存储逻辑，自动生成对应的SQL并调用JDBC接口加以执行。 HIBERNATE: Hibernate是一个开放源代码的对象关系映射框架，它对JDBC进行了非常轻量级的对象封装，使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合，既可以在Java的客户端程序使用，也可以在Servlet/JSP的Web应用中使用，最具革命意义的是，Hibernate可以在应用EJB的J2EE架构中取代CMP，完成数据持久化的重任. Hibernate是一个免费的开源Java包，它使得与关系数据库打交道变得十分轻松，就像您的数据库中包含每天使用的普通Java对象一样，同时不必考虑如何把它们从神秘的数据库表中取出（或放回到数据库表中） IBATIS和HIBERNATE的比较： 在系统咨询工作过程中，常常遇到以下情况： 1． 系统的部分或全部数据来自现有数据库，处于安全考虑，只对开发团队提供几条Select SQL（或存储过程）以获取所需数据，具体的表结构不予公开 2．开发规范中要求，所有牵涉到业务逻辑部分的数据库操作，必须在数据库层由存储过程实现（就笔者工作所面向的金融行业而言，工商银行、中国银行、交通银行，都在开发规范中严格指定） 3．系统数据处理量巨大，性能要求极为苛刻，这往往意味着我们必须通过经过高度优化的SQL语句（或存储过程）才能达到系统性能设计指标，面对这样的需求，再次举起 Hibernate 大刀，却发现刀锋不再锐利，甚至无法使用，奈何？恍惚之际，只好再摸出JDBC 准备拼死一搏……，说得未免有些凄凉，直接使用 JDBC进行数据库操作实际上也是不错的选择，只是拖沓的数据库访问代码，乏味的字段读取操作令人厌烦，“半自动化”的ibatis，却刚好解决了这个问题，这里的“半自动化”，是相对Hibernate等提供了全面的数据库封装机制的“全自动化”，ORM 实现而言，“全自动”ORM 实现了 POJO 和数据库表之间的映射，以及 SQL 的自动生成和执行，而ibatis 的着力点，则在于POJO 与 SQL之间的映射关系，也就是说，ibatis并不会为程序员在运行期自动生成 SQL 执行，具体的 SQL 需要程序员编写，然后通过映射配置文件，将SQL所需的参数，以及返回的结果字段映射到指定 POJO。 使用ibatis 提供的ORM机制，对业务逻辑实现人员而言，面对的是纯粹的 Java对象，这一层与通过 Hibernate 实现 ORM [...]]]></description>
		<wfw:commentRss>http://www.mianwww.com/html/2011/11/12311.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate面试题集</title>
		<link>http://www.mianwww.com/html/2011/11/12252.html</link>
		<comments>http://www.mianwww.com/html/2011/11/12252.html#comments</comments>
		<pubDate>Sat, 26 Nov 2011 04:23:25 +0000</pubDate>
		<dc:creator>jim.jin</dc:creator>
				<category><![CDATA[Hibernate]]></category>

		<guid isPermaLink="false">http://www.mianwww.com/?p=12252</guid>
		<description><![CDATA[一. Hibernate中：不看数据库，不看XML文件，不看查询语句，怎么样能知道表结构？ 看表结构对应的类文件，比如UserInfo表对应的UserInfo.java文件 二. hibernate数据查询的几种方式都是什么？ 1.使用主键id加载对象(load(),get()); 2.通过对象导航,比如通过stu.getTeam()得到team的实例; 3 使用hql; 4使用qbc(query by criteria) 5直接使用sql语句取得记录集; 一般都使用后面三种方式. 注意.hql是面向对象的查询.语法和sql是基本一样的.不区分大小写的,但是注意的是对与对象.必须遵循对象的大小写.因为hql是对像查询..同时我们必须清楚.hql只能取得对象,而不支持uid(update,insert.delete) 三. Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现：a)实体对象  b)集合（Collection） 2. Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候，数据并没有存在与内存中，当程序真正对数据的操作时，对象才存在与内存中，就实现了延迟加载，他节省了服务器的内存开销，从而提高了服务器的性能。 四. Hibernate中怎样实现类之间的关系?(如：一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作，它们都市对对象进行操作，我们程序中把所有的表与类都映射在一起，它们通过配置文件中的many-to-one、one-to-many、many-to-many 五. 请介绍一下下Hibernate的缓存机制？ 1. 内部缓存存在Hibernate中又叫一级缓存，属于应用事物级缓存 2. 二级缓存： a) 应用及缓存 b) 分布式缓存 条件：数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非        关键数据 c) 第三方缓存的实现 六. 如何对hibernate进行优化？ 1. 使用双向一对多关联，不使用单向一对多 2. 灵活使用单向一对多关联 3. 不用一对一，用多对一取代 4. 配置对象缓存，不使用集合缓存 5. 一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少，表关联不要怕多，有二级缓存]]></description>
		<wfw:commentRss>http://www.mianwww.com/html/2011/11/12252.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java框架面试题</title>
		<link>http://www.mianwww.com/html/2011/11/11764.html</link>
		<comments>http://www.mianwww.com/html/2011/11/11764.html#comments</comments>
		<pubDate>Thu, 10 Nov 2011 11:43:28 +0000</pubDate>
		<dc:creator>jim.jin</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Struts]]></category>

		<guid isPermaLink="false">http://www.mianwww.com/?p=11764</guid>
		<description><![CDATA[1. 请简述STRUTS架构 Struts是采用Java Servlet/JavaServer Pages技术，开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能： 一.包含一个controller servlet，能将用户的请求发送到相应的Action对象。 二.JSP自由tag库，并且在controller servlet中提供关联支持，帮助开发员创建交互式表单应用。 三.提供了一系列实用对象：XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。 2. 在Spring框架中，如何解决Web页面乱码问题？ 可以采用Spring框架自带的过滤器CharacterEncodingFilter，配置方式如下： 在web.xml文件中filter的位置加上如下内容： encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true encodingFilter * 3. 在Struts中，如何实现防止表单的重复提交操作？ Struts的Token（令牌）机制能够很好的解决表单重复提交的问题，基本原理是：服务器端在处理到达的请求之前，会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较，看是否匹配。在处理完该请求后，且在答复发送给客户端之前，将会产生一个新的令牌，该令牌除传给客户端以外，也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话，客户端传过来的令牌就和服务器端的令牌不一致，从而有效地防止了重复提交的发生。 4. Struts的入口类？ 答：ActionServlet是Struts的入口类，所有的struts请求都经由该类转发处理 5. 关于hibernate: 1)在hibernate中，在配置文件呈标题一对多，多对多的标签是什么； 2)Hibernate的二级缓存是什么； 3)Hibernate是如何处理事务的； 答：1）一对多的标签为： ；多对多的标签为：； 2）sessionFactory的缓存为hibernate的二级缓存； 3）Hibernate的事务实际上是底层的JDBC Transaction的封装或者是JTA Transaction的封装；默认情况下使用JDBCTransaction。 6. 写出你熟悉的开源框架以及各自的作用。 答：框架：hibernate,spring,struts. Hibernate主要用于数据持久化； Spring 的控制反转能起到解耦合的作用； Struts 主要用于流程控制； 服务器类：Apache Tomcat Jboss等 7. [...]]]></description>
		<wfw:commentRss>http://www.mianwww.com/html/2011/11/11764.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>hibernate基础试题</title>
		<link>http://www.mianwww.com/html/2011/11/11734.html</link>
		<comments>http://www.mianwww.com/html/2011/11/11734.html#comments</comments>
		<pubDate>Thu, 10 Nov 2011 11:22:01 +0000</pubDate>
		<dc:creator>jim.jin</dc:creator>
				<category><![CDATA[Hibernate]]></category>

		<guid isPermaLink="false">http://www.mianwww.com/?p=11734</guid>
		<description><![CDATA[1.请解释Hibernate3.2主键生成方式中native和identity方式的区别 2.请解释为什么SessionFactory一般以方式的使用 3.请解释说明hibernate配置文件中dialect属性的确切含义 4.请解释说明Hibernate控制下的POJO会呈现三种状态，分别是：transient、persistent和detached，请解释这三种状态 5.请解释Session的load方法和get方法和get方法的不同；以及Query的list和iterator方法的不同 6.Hibernate映射文件如下：]]></description>
		<wfw:commentRss>http://www.mianwww.com/html/2011/11/11734.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>中兴公司Hibernate笔试题库</title>
		<link>http://www.mianwww.com/html/2011/10/10828.html</link>
		<comments>http://www.mianwww.com/html/2011/10/10828.html#comments</comments>
		<pubDate>Wed, 12 Oct 2011 13:35:52 +0000</pubDate>
		<dc:creator>jim.jin</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[中兴]]></category>

		<guid isPermaLink="false">http://www.mianwww.com/?p=10828</guid>
		<description><![CDATA[一、选择题 （每题2分 共22分） (1)一般情况下，关系数据模型与对象模型之间有哪些匹配关系（多选） A)表对应类  B)记录对应对象  C)表的字段对应类的属性D)表之间的参考关系对应类之间的依赖关系 (2)以下关于SessionFactory的说法哪些正确？（多选） A)对于每个数据库事务，应该创建一个SessionFactory对象B)一个SessionFactory对象对应一个数据库存储源。C)SessionFactory是重量级的对象，不应该随意创建。如果系统中只有一个数据库存储源，只需要创建一个。D)SessionFactory的load()方法用于加载持久化对象 (3)元素有一个cascade属性，如果希望Hibernate级联保存集合中的对象，casecade属性应该取什么值？（单选） A)none B)save  C)delete  D)save-update (4)以下哪些属于Session的方法？ A)load()B)save()C)delete()D)update()E)open()F)close() (5)以下程序的打印结果是什么？（单选） tx = session.beginTransaction(); Customer c1=(Customer)session.load(Customer.class,new Long(1)); Customer c2=(Customer)session.load(Customer.class,new Long(1)); System.out.println(c1==c2); tx.commit(); session.close(); A)运行出错，抛出异常B)打印falseC)打印true (6)以下程序代码对Customer的name属性修改了两次： tx = session.beginTransaction(); Customer customer=(Customer)session.load(Customer.class, new Long(1)); customer.setName(\&#8221;Jack\&#8221;); customer.setName(\&#8221;Mike\&#8221;); tx.commit(); 执行以上程序，Hibernate需要向数据库提交几条update语句？（单选） A)0  B)1 C)2  D)3 (7)在持久化层，对象分为哪些状态？（多选） A)临时状态 B)独立状态 C)游离状态 D)持久化状态 (8)对于以下程序，Customer对象在第几行变为持久化状态？（单选） Customer customer=new Customer(); //line1 customer.setName(\&#8221;Tom\&#8221;); //line2 Session session1=sessionFactory.openSession(); //line3 Transaction tx1 = session1.beginTransaction(); //line4 session1.save(customer); //line4 tx1.commit(); //line5 session1.close(); //line6 A) line1 B)line2 C)line3 D)line4 E)line5 F)line6 [...]]]></description>
		<wfw:commentRss>http://www.mianwww.com/html/2011/10/10828.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate面试题集</title>
		<link>http://www.mianwww.com/html/2011/10/10523.html</link>
		<comments>http://www.mianwww.com/html/2011/10/10523.html#comments</comments>
		<pubDate>Wed, 05 Oct 2011 03:03:32 +0000</pubDate>
		<dc:creator>jim.jin</dc:creator>
				<category><![CDATA[Hibernate]]></category>

		<guid isPermaLink="false">http://www.mianwww.com/?p=10523</guid>
		<description><![CDATA[1) Load和get区别， Session.load/get方法均可以根据指定的实体类和id从数据库读取记录，并返回与之对应的实体对象。其区别在于：  如果未能发现符合条件的记录，get方法返回null，而load方法会抛出一个ObjectNotFoundException。  Load方法可返回实体的代理类实例，而get方法永远直接返回实体类。  load方法可以充分利用内部缓存和二级缓存中的现有数据，而get方法则仅仅在内部缓存中进行数据查找，如没有发现对应数据，将越过二级缓存，直接调用SQL完成数据读取。 2) 在数据库中条件查询速度很慢的时候,如何优化? 1. 建索引 2. 减少表之间的关联 3. 优化sql，尽量让sql很快定位数据，不要让sql做全表查询，应该走索引,把数据量大的表排在前面 4. 简化查询字段，没用的字段不要，已经对返回结果的控制，尽量返回少量数据 3) Hibernate有哪几种查询数据的方式 4) Hibernate工作原理及为什么要用？ 5) 说下Hibernate的缓存机制 6) Hibernate对象的三种状态是什么？ 7) 谈谈hibernate的延迟加载和openSessionInView OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类，其主要意思是在发起一个页面请求时打开Hibernate的Session，一直保持这个Session，直到这个请求结束，具体是通过一个Filter来实现的。 　　由于Hibernate引入了Lazy Load特性，使得脱离Hibernate的Session周期的对象如果再想通过getter方法取到其关联对象的值，Hibernate会抛出一个LazyLoad的Exception。所以为了解决这个问题，Spring引入了这个Filter，使得Hibernate的Session的生命周期变长。 　　有两种方式可以配置实现OpenSessionInView，分别是OpenSessionInViewInterceptor和OpenSessionInViewFilter，功能完全相同，只不过一个在web.xml配置，另一个在application.xml配置而已。我个人比较倾向配置在application.xml里，因为web.xml里配置的东西的太多的话容易发生冲突，虽然可以调整，但是毕竟多了个麻烦。]]></description>
		<wfw:commentRss>http://www.mianwww.com/html/2011/10/10523.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java SSH面试题集</title>
		<link>http://www.mianwww.com/html/2011/09/10270.html</link>
		<comments>http://www.mianwww.com/html/2011/09/10270.html#comments</comments>
		<pubDate>Thu, 22 Sep 2011 05:23:53 +0000</pubDate>
		<dc:creator>jim.jin</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Struts]]></category>

		<guid isPermaLink="false">http://www.mianwww.com/?p=10270</guid>
		<description><![CDATA[Java&#8212;SSH(MVC) 1. 谈谈你mvc的理解 MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式，它强制性的把应用程序的输入、处理和输出分开。 MVC中的模型、视图、控制器它们分别担负着不同的任务。 视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据，并接受用户的输入。视图不进行任何业务逻辑处理。 模型: 模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提供数据。这提高了应用程序的重用性 控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。 然后根据处理的结果调用相应的视图来显示处理的结果。 MVC的处理过程：首先控制器接受用户的请求，调用相应的模型来进行业务处理，并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户。 Struts 1. struts1.2和struts2.0的区别？如何控制两种框架中的单例模式？ struts1.2和struts2.0的对比 a、Action类： struts1.2要求Action类继承一个基类。struts2.0 Action要求继承ActionSupport基类 b、线程模式 struts1.2 Action是单例模式的并且必须是线程安全的,因为仅有一个Action的实例来处理所有的请求。 单例策略限制了Struts1.2 Action能做的事情,并且开发时特别小心。Action资源必须是线程安全的或同步的。 struts2.0 Action为每一个请求产生一个实例,因此没有线程安全问题。 c、Servlet依赖 struts1.2 Action依赖于Servlet API,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execut方法。 struts2.0 Action不依赖于容器,允许Action脱离容器单独测试。如果需要,Struts2 Action仍然可以访问初始的Request和Response。 但是,其他的元素减少或者消除了直接访问HttpServletRequest和HttpServletResponse的必要性。 d、可测性 测试struts1.2 Action的一个主要问题是execute方法暴露了Servlet API(这使得测试要依赖于容器)。一个第三方扩展：struts TestCase 提供了一套struts1.2的模拟对象来进行测试。 Struts2.0 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”也使得测试更容易。 2. 项目中为什么使用SSH 1. 使用Struts是因为struts是基于MVC模式的,很好的将应用程序进行了分层，使开发者更关注于业务逻辑的实现；第二，struts有着丰富的taglib,如能灵活运用，则能大大提高开发效率。 2. 使用Hibernate：因为hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架，功能丰富。 3. 使用Spring：因为spring基于IoC(Inversion of Control，反向控制)和AOP构架多层j2ee系统的框架，但它不强迫你必须在每一层中必须使用Spring，因为它模块化的很好，允许你根据自己的需要选择使用它的某一个模块； 采用IoC使得可以很容易的实现bean的装配，提供了简洁的AOP并据此实现事务管理(Transcation Managment),等等 [...]]]></description>
		<wfw:commentRss>http://www.mianwww.com/html/2011/09/10270.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>hibernate常见面试题集</title>
		<link>http://www.mianwww.com/html/2011/06/9835.html</link>
		<comments>http://www.mianwww.com/html/2011/06/9835.html#comments</comments>
		<pubDate>Wed, 29 Jun 2011 00:49:55 +0000</pubDate>
		<dc:creator>jim.jin</dc:creator>
				<category><![CDATA[Hibernate]]></category>

		<guid isPermaLink="false">http://www.mianwww.com/?p=9835</guid>
		<description><![CDATA[1.在数据库中条件查询速度很慢的时候,如何优化? 　　1.建索引 　　2.减少表之间的关联 　　3.优化sql，尽量让sql很快定位数据，不要让sql做全表查询，应该走索引,把数据量大的表排在前面 　　4.简化查询字段，没用的字段不要，已经对返回结果的控制，尽量返回少量数据 　　2.在Hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 　　解决方案一，按照Object[]数据取出数据，然后自己组bean 　　解决方案二，对每个表的bean写构造函数，比如表一要查出field1,field2两个字段，那么有一个构造函数就是Bean(type1 filed1,type2 field2) ，然后在hql里面就可以直接生成这个bean了。具体怎么用请看相关文档，我说的不是很清楚。 　　session.load()和session.get()的区别 　　Session.load/get方法均可以根据指定的实体类和id从数据库读取记录，并返回与之对应的实体对象。其区别在于： 　　如果未能发现符合条件的记录，get方法返回null，而load方法会抛出一个ObjectNotFoundException。 　　Load方法可返回实体的代理类实例，而get方法永远直接返回实体类。 　　load方法可以充分利用内部缓存和二级缓存中的现有数据，而get方法则仅仅在内部缓存中进行数据查找，如没有发现对应数据，将越过二级缓存，直接调用SQL完成数据读取。 　　Session在加载实体对象时，将经过的过程： 　　首先，Hibernate中维持了两级缓存。第一级缓存由Session实例维护，其中保持了Session当前所有关联实体的数据，也称为内部缓存。而第二级缓存则存在于SessionFactory层次，由当前所有由本SessionFactory构造的Session实例共享。出于性能考虑，避免无谓的数据库访问，Session在调用数据库查询功能之前，会先在缓存中进行查询。首先在第一级缓存中，通过实体类型和id进行查找，如果第一级缓存查找命中，且数据状态合法，则直接返回。之后，Session会在当前“NonExists”记录中进行查找，如果“NonExists”记录中存在同样的查询条件，则返回null。“NonExists”记录了当前Session实例在之前所有查询操作中，未能查询到有效数据的查询条件（相当于一个查询黑名单列表）。如此一来，如果Session中一个无效的查询条件重复出现，即可迅速作出判断，从而获得最佳的性能表现。 　　对于load方法而言，如果内部缓存中未发现有效数据，则查询第二级缓存，如果第二级缓存命中，则返回。 　　如在缓存中未发现有效数据，则发起数据库查询操作（Select SQL），如经过查询未发现对应记录，则将此次查询的信息在“NonExists”中加以记录，并返回null。 　　根据映射配置和Select SQL得到的ResultSet，创建对应的数据对象。 　　将其数据对象纳入当前Session实体管理容器（一级缓存）。 　　执行Interceptor.onLoad方法（如果有对应的Interceptor）。 　　将数据对象纳入二级缓存。 　　如果数据对象实现了LifeCycle接口，则调用数据对象的onLoad方法。 　　返回数据对象。 　　Hibernate的主键生成机制 　　1) assigned 　　主键由外部程序负责生成，无需Hibernate参与。 　　2) hilo 　　通过hi/lo 算法实现的主键生成机制，需要额外的数据库表保存主键生成历史状态。 　　3) seqhilo 　　与hilo 类似，通过hi/lo 算法实现的主键生成机制，只是主键历史状态保存在Sequence中，适用于支持Sequence的数据库，如Oracle。 　　4) increment 　　主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量，以保存着当前的最大值，之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是：如果当前有多个实例访问同一个数据库，那么由于各个实例各自维护主键状态，不同实例可能生成同样的主键，从而造成主键重复异常。因此，如果同一数据库有多个实例访问，此方式必须避免使用。 5) identity 　　采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。 　　6) sequence 　　采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence。 　　7) native [...]]]></description>
		<wfw:commentRss>http://www.mianwww.com/html/2011/06/9835.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SSH框架面试题</title>
		<link>http://www.mianwww.com/html/2011/06/9770.html</link>
		<comments>http://www.mianwww.com/html/2011/06/9770.html#comments</comments>
		<pubDate>Sun, 19 Jun 2011 05:27:57 +0000</pubDate>
		<dc:creator>jim.jin</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Struts]]></category>

		<guid isPermaLink="false">http://www.mianwww.com/?p=9770</guid>
		<description><![CDATA[Hibernate工作原理及为什么要用？ 原理： 1. 读取并解析配置文件 2. 读取并解析映射信息，创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation 5. 持久化操作 6. 提交事务 7. 关闭Session 8. 关闭SesstionFactory 为什么要用： * 对JDBC访问数据库的代码做了封装，大大简化了数据访问层繁琐的重复性代码。 * Hibernate是一个基于JDBC的主流持久化框架，是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 * hibernate使用Java反射机制，而不是字节码增强程序来实现透明性。 * hibernate的性能非常好，因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库，从一对一到多对多的各种复杂关系。 Hibernate是如何延迟加载? * Hibernate2延迟加载实现：a)实体对象 b)集合（Collection） * Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候，数据并没有存在与内存中，当程序真正对数据的操作时，对象才存在与内存中，就实现了延迟加载，他节省了服务器的内存开销，从而提高了服务器的性能。 Hibernate中怎样实现类之间的关系?(如：一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作，它们都市对对象进行操作，我们程序中把所有的表与类都映射在一起，它们通过配置文件中的many-to-one、one-to-many、many-to-many、 说下Hibernate的缓存机制 * 内部缓存存在Hibernate中又叫一级缓存，属于应用事物级缓存 * 二级缓存： a)应用及缓存 b)分布式缓存 条件：数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据 c) 第三方缓存的实现 Hibernate的查询方式 Sql、Criteria,object comptosition Hql： * 属性查询 * [...]]]></description>
		<wfw:commentRss>http://www.mianwww.com/html/2011/06/9770.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

