补充下:load:如果没有找到用户想得到的记录,会抛出异常 get:。。,会返回null适用hibernate api上面的原话来说就是: load(): You should not use this method to determine if an instance exists (use get() instead). Use this only to retrieve an instance that you assume exists, where non-existence would be an actual error.
2. 這個簡單,jsp做v端,m就是form,c端就是action
3. struts in action 上有很多
4. IOC是最常用的,也是spring的特點,比如action里面要用service,或者別的參數,則可以將參數指定在構造方法,或者作為屬性傳遞
aop 一般是做log記錄
5. 3 種(本人僅知道)
6. load 先查緩存中是否有,有就取,沒有就再訪問數據庫,get訪問數據庫
7. 延時用在多表連接時,取該表數據,是否立即取相關聯的數據,openSessionInView 沒用過
8. spring in action 有很多
9. update 是更新,只能更新存在的數據,saveorupdate,當數據不存在,則保持,存在則更新
10 只要在配置文件里面,配置就可以了,具體用法就是用getHibernateTemplate代替直接操作hiberante散分結貼
不敢苟同。不管是load还是get,都会查缓存的。
好像GET 是直接从数据库取出来,然后再放到缓存里的吧
load()抛出异常 load默认支持延迟加载!
spring事务分两种形式,声明式事务和编程式事务,spring提供了一个事务的接口PaltformTractionManager接口,针对不同的事务,spring进行了不同的实现,对hibernate事务的实现HIbernateTractionManager,对JDBC的JdbcTractionManager,DataSourceTractionManager以及JdoTractionManager。接口platformTractionManager提供了三个方法,获取事务,提交和回滚的方法。spring的事务事务的隔离级别以及传播行为,建议楼主去看看spring的底层代码。基本都是可以看明白的。
以前用load时报session关闭,换get就没有问题,至今没明白。谁解释一下。。
所以在这种情况下不能关闭session的。
ActionForm封装用户请求数据,可进行格式验证;
ActionServlet接受请求,根据struts-config.xml文件,将请求发送给相应的Action对象;
Action接受请求,从ActionForm中获得数据,处理数据,可调用Model层处理数据,将结果返回给ActionServlet;
ActionServlet将处理结果返回给相应的Viewer显示
1.不是线程安全的!可以使用局部变量来解决,如果用Spring可以把scope设置成property
2.jsp v javabena model c action
3,actionmapping actionforward actionerr等
4.ICO就不说了就那样用了AOP在spring2.0后来实现事务管理还是很方便的
5.我记得好像是3种 应该是 query(HQL) critea 和sql方言
6.
load想会去查找1级缓存然后去2级缓存查,不存在去查数据库,没有找到抛出异常
get只会在1级缓存中查找,不存在去查数据库,没有找到返回null
7.hibernate 的延迟加载就不说了HIbernate3中支持属性的延迟加载
openSessionInView我的理解就是为了延迟加载来的
因为SPRING管理事务,session会关闭,这个时候延迟加载会报错的,so出现了这个
8.
2种 声明式事务和编程式事务 后面没有记都是直接copy配置 汗!~~~~~~~
9.
好像实体类映射的时候有个unsaved的值,hibernate根据这个来判断这个实体有没有被持久化,
如果没有 save否则update
10.
没有什么好说的HibernateTempxx中调用好像这些都很基础,偶学Hibernate还不久
补充下:load:如果没有找到用户想得到的记录,会抛出异常
get:。。,会返回null适用hibernate api上面的原话来说就是:
load():
You should not use this method to determine if an instance exists (use get() instead). Use this only to retrieve an instance that you assume exists, where non-existence would be an actual error.
2)DispatchServlet
3) DispatchAction 可以在里面定义多个对象 ActionForm 对应实体
4) AOP对一些横切逻辑进行模块化 IOC由容器解决对象间依赖关系
5)find get load
6) get() 如果数据库没有值返回NULL load()抛出异常 load默认支持延迟加载!
7) 延迟加载是指真正用到才去加载 openSessionInView就是为了解决session在manager层关闭,页面无法的延迟加载的对象
8)声明式事务和编程式事务
9)不知
10)hibernateTemplate
struts1不是,struts2是;
声明局部变量,或者扩展RequestProcessor,让每次都创建一个Action,或者在spring中用scope="prototype"来管理
2.MVC,分析一下struts是如何实现MVC的
m:JavaBean 或结合 EJB 组件或者pojo构成
c:Action 来实现
v:一组 JSP 文件及其标签构成。
3.struts中的几个关键对象的作用(说说几个关键对象的作用)
Action:控制器类,ActionForm:表单对象,DynaValidatorForm:动态form,ActonMapping:配置文件中action节点的信息......
4.说说AOP和IOC的概念以及在spring中是如何应用的
AOP:面向方面编程,ioc:依赖注入;声明式事务和编程式事务积极一些通用部分
5.Hibernate有哪几种查询数据的方式
hql查询,sql查询,条件查询
6.load()和get()的区别
load时候之查询一级缓存,没有就创建代理,用的时候就去数据库找,没找到抛异常;get()现在一级缓存找,没有就去二级缓存找,没有就去数据库找,没有就返回null
7.谈谈hibernate的延迟加载和openSessionInView
延迟加载要在session范围内,用到的时候再加载;opensessioninview是在web层写了一个filter来打开和关闭session,这样就表示在一次request过程中session一直开着,保证了延迟加载在session中的这个前提。
8.spring的事务有几种方式?谈谈spring事务的隔离级别和传播行为。
声明事务和编程事务
隔离级别:
- DEFAULT使用数据库默认的隔离级别
- READ_UNCOMMITTED会出现脏读,不可重复读和幻影读问题
- READ_COMMITTED会出现重复读和幻影读
- REPEATABLE_READ会出现幻影读
- SERIALIZABLE最安全,但是代价最大,性能影响极其严重
和传播行:
- REQUIRED存在事务就融入该事务,不存在就创建事务
- SUPPORTS存在事务就融入事务,不存在则不创建事务
- MANDATORY存在事务则融入该事务,不存在,抛异常
- REQUIRES_NEW总是创建新事务
- NOT_SUPPORTED存在事务则挂起,一直执行非事务操作
- NEVER总是执行非事务,如果当前存在事务则抛异常
- NESTED嵌入式事务
9.Hibernate中的update()和saveOrUpdate()的区别.
摘自hibernate说明文档:
saveOrUpdate()做下面的事:
如果对象已经在本session中持久化了,不做任何事
如果另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常
如果对象没有持久化标识(identifier)属性,对其调用save()
如果对象的持久标识(identifier)表明其是一个新实例化的对象,对其调用save()
如果对象是附带版本信息的(通过<version>或<timestamp>) 并且版本属性的值表明其是一个新实例化的对象,save()它。
否则update() 这个对象 10.Spring对多种ORM框架提供了很好的支持,简单描述在Spring中使用Hibernate的方法,并结合事务管理。
getHiberanteTemplate里面提供了save,update,delete,find等方法。
简单说一个:如果配置了声明式事务,当执行getHibernateTemplate的各种方法的时候,事务会自动被加载
如果没有配置事务,那么以上操作不会真正的被同步到数据库,除非配置了hibernate的autocommit=true