3:identity
----主要适用于sqlserver数据库的自动增长列的表。 4:native
----表示根据不同的数据库采用不同的主键生成策略。
6.请指出session的get和load方法、save和saveOrUpdate方法、clear和flush方法的区别? get():先检查缓存(session),没有该对象立马发sql,如果对象不存在返回null,使用的时候则NullPointerException
load():返回代理对象($$,stu.getClass()),需要用到的时候先检查缓存,没有才发sql,如果对象不存在直接异常(LazyInitializationException),session关闭后再用到也将异常 no session
get()较常用,load()不常用
save():不管怎样都保存,即使有和数据库相同的id
saveOrUpdate():对象存在id则update,如果数据库有id则成功update没有对应的id则异常,对象没有id则save
clear():强制清空缓存,让对象变成瞬时状态或者游离状态
flush():默认强制缓存和数据库同步一下,对象变为持久状态,但没有提交还可以回滚session没有关闭
☆6、hiberante中的对象关联关系有哪几种?MyBatis怎么配置关联关系? 1、单向一对一关联映射
2、单向多对一关联映射(many-to-one) 3、单向一对多关联映射(one-to-many) 4、单向多对多映射(many-to-many) 5、双向一对一关联映射 6、双向一对多关联映射 7、双向多对多关联映射
mybatis:可以使用嵌入式,引入式,继承式
一对多的时候在一的一方设置collection,多的一方设置association 多对一的时候在多的一方设置association,一的一方设置collection 多对多的时候,使用中间表实体映射,拆成一对多和多对一
7、hibernate联接查询有哪几种,迫切和非迫切有什么区别? 1.默认查询的情况: 2.迫切左外连接 3.左外连接 4.迫切内连接
5.内连接(包含隐式内连接) 6.右外连接
迫切联接和非迫切联接返回类型不同,但都是持久化状态,无论是否懒加载都会加载关联对象!
8、请描述下list()方法和iterate()方法有什么区别?
iterate:先取所有需要的id,根据id查询对应的记录,第二次iterate先看缓存有木有,木有才发sql
list:直接取所有记录,即使同一事务中第二次list还会发sql去数据库取,没有利用一级缓存
☆9、请描述下hibernate的缓存机制及事务隔离机制?[文思海辉电话面试 中信] 缓存机制:分类:
1.一级缓存:session缓存,事务范围的缓存
☆2.二级缓存:sessionFactory的缓存,事务隔离级别的缓存(经常被访问、改动不大、数量有限、不是很重要,允许出现偶尔并发的数据)
3.查询缓存(应用程序运行时经常使用的查询语句,很少对查询的数据进行增、删、改操作)
缓存算法:LRU最近很少使用 LFU最少被使用 FIFO先进先出
作用:降低应用程序对数据库的访问频率,提高应用程序的运行效率
事务隔离机制:当事务并发访问有可能造成:脏读、不可重复读、幻读,会严重影响数据库和用户体验,通过设置事务隔离级别,
或者利用Hibernate提供的两种锁机制,悲观锁和乐观锁来解决
10、谈谈你对xml配置文件中的fetch和inverse的理解? fetch是抓取策略:
select是在查询的时候先查询出一个实体,然后在根据一个查询出多个实体,产生1+N现象
join是在查询的时候使用外连接进行查询
subselect发送一条select语句抓取在前面查询到的所有实体对象的关联集合 实现懒加载设置lazy=\后,一定得设置fetch属性等于select
inverse:标记由哪一方来维护关联关系,双向关联中,默认值为false,如果设置为true,则表示由对方维护两者之间的关联关系
11、Hibernate是如何延迟加载[华榭科技有限公司]
***************Mybatis********
☆1.Mybatis理解[逑美科技有限公司]
mybatis是一个可以自定义SQL 存储过程 和高级映射的轻量级的持久层框架,将面向接口编程的思想贯穿整个系统应用
2.mybatis框架原理 1.加载配置并初始化 2.接受调用请求 3.处理操作要求 4.返回处理结果
优缺点:
优点:简单 实用 缺点:不成熟
☆3.性能优化:解决1+N问题:用到哪个对象才发对应的sql 1、使用懒加载
配置: 只要用到对象,不管是否用到关联对象都发1+N,只有什么对象都不用才发一条sql 2、使用联接查询 left join ... ☆4.缓存: 一级缓存是默认开启不能关闭 mybatis中还默认开启了全局缓存(二级缓存) 缓存开启后session没有关闭执行同样的sql语句会使用缓存,如果参数改变,缓存就会失效。 实现方式:1.内置 -cache 机制 2.第三方-ehcache, oscache ☆5.对比-Mybatis和hibernate的区别和应用场景? hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。 对sql语句进行优化、修改比较困难的。 应用场景: 适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。 mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql, mybatis 也可以实现映射(输入映射、输出映射)。 应用场景: 适用与需求变化较多的项目,比如:互联网项目 ☆☆Hibernate和Mybatis的区别 同: Hibernate与MyBatis都可以通过SessionFactoryBuilder由xml配置文件生成SessionFactory,然后由SessionFactory生成Session, 最后由Session来开启事务和SQL语句 都支持JDBC和事务处理 异:hibernate是全自动 Mybatis是半自动 hibernate数据库移植性大于Mybatis Mybatis更注重于SQL hibernate拥有完整的日志系统,Mybatis则欠缺些 ☆6.Mybatis中#跟$的区别? #把传入的数据当作字符串 $传入的数据直接生成在sql里 #方式能够很大程度防止sql注入 $无法防止sql注入 7.ibatis: 开源的 轻量级的 基于java持久层的 半自动式开发框架 优点: 1、sql可以写在XML中 结构清晰 配置灵活 2、增强了后期维护性 3、执行sql后 返回的结果集自动封装 缺点: 1、只使用于小项目 2、sql写在XML中 调试不方面 3、开源的东西少 文档资料少 8.ibatis 跟mybatis的区别: 1、mybatis实现了接口绑定,使用更加方便 2、mybatis改进了对象关系映射,效率更高 3、MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。 4.mybatis 增加的注解版 Ibatis跟Hibernate比较: 如果系统二次开发 Ibatis比Hibernate灵活性高 Ibatis简单易学 Hibernate相对复杂 在不同的数据库移植中 hibernate比较好 Ibatis可以进行细粒度优化 而Hibernate根据映射关系全部优化 Ibatis跟jdbc 比较: jdbc它是一个执行Sql语句的JAVA API 是一套访问数据库标准 提供了一组接口 Ibatis也是一套数据库框架 但是把sql语句抽离了出来 底层也是JDBC 9.MyBatis使用的版本?[上海普元] MyBatis 3.3 ☆10.MyBatis的标签?[德邦] 1>.insert select update delete 2>.关联关系:resultMap id result association 5>.调用存储过程:parameterMap ****************JPA************************** Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系. 是 JCP 组织发布的 Java EE 标准之一.,任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问 API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行 优点:标准化 对容器级特性的支持 简单易用,集成方便 查询能力 高级特性(支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系) 与Hibernate相比,JPA是不是更好 JPA是规范,而Hibernate是实现 ****************SpringData************************** 为了简化构建于Spring框架的应用的数据访问计数,包括非关系数据库 Map-Reduce框架 云数据服务等等,另外包括对关系数据库的访问支持 ******框架-Struts2******** MVC的理解?[上海卫城企业征信有限公司] 1.Struts2的.理解 Struts 2是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts 1的部分优点 Struts 2拥有更加广阔的前景,自身功能强大,还对其他框架下开发的程序提供很好的兼容性 ☆☆struts2的优缺点(上海优驻) 优点:组件模块化、灵活、可重用,简化了基于MVC的web应用程序的开发 可对象导航 支持国际化和本地化