一、Hibernate
1、Hibernate的工作原理
①. 通过Configuration读取并解析hibernate.cfg.xml配置文件
②. 由hibernate.cfg.xml中的<mapping resource>读取并解析映射文件
③. 通过config.buildSessionFactory创建sessionFactory
④. 通过sessionFactory.openSession获取session
⑤. 通过session.beginTransaction开启事务
⑥. 操作数据
⑦. 提交事务
⑧. 关闭session和sessionFactory
2、在Hibernate应用中Java对象的状态有那些?
①临时状态(新建状态):不处于session缓存中;
②持久化状态:加入到session缓冲中;
③游离状态:已经被持久化,但不在session的缓存中;
3、Hibernate如何延迟加载?
session.load();
二、Spring
1、Spring是什么及Spring的优点
①Spring是一个IOC和AOP容器框架;
②Spring是非侵入式的;
③Spring提供对事务的管理;
⑤Spring对主流的框架提供了很好的集成支持,比如和hibernate SpringMVC等框架的集成
2、讲一讲你对AOP和IOC的理解
IOC:Invert of control,控制反转,也称为DI(依赖注入);
AOP:面向切面编程,本质就是拦截器,比如项目中的事务和日志就是很好的体现了AOP;
3、可以在spring中注入null或者空字符串吗?
可以
注入null值
<property name=”email”><null/></property>
注入空字符串:
<property name=”email” value=””></property>
三、MyBatis
1、#{}和${}区别是什么?
①#{}更好的防止sql注入;
②#{}自带单引号而¥{}没有;
③#{}更方便来进行模糊查;
2、mybatis的缓存机制
MyBatis分为一级缓存和二级缓存
一级缓存:SqlSession级别的缓存,基于HashMap本地缓存,当同一个sqlSession执行两次相同的SQL语句时,第一次执行完后会将数据库中查询到的结果写到缓存,第二次查询时直接从缓冲中读取不经过数据库了;
二级缓存:mapper级别的缓存,也是基于hashmap本地缓存,不同的sqlSession两次执行相同的namespace下的sql语句,第二次查询就不会进行数据库了;