JAVA面试问题及答案.docxVIP

  • 8
  • 0
  • 约1.9万字
  • 约 31页
  • 2021-04-13 发布于天津
  • 举报
1、 什么是ORM ? 答:对象关系映射(Object-Relational Mapping ,简称ORM )是一种为了解决程序的面 向对象模型与数据库的关系模型互不匹配问题的技术;简单的说, ORM是通过使用描述对 象和数据库之间映射的元数据(在 Java中可以用XML或者是注解),将程序中的对象自 动持久化到关系数据库中或者将关系数据库表中的行转换成 Java对象,其本质上就是将数 据从一种形式转换到另外一种形式。 2、 持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些? 答:所谓持久就是将数据保存到可掉电式存储设备中以便今后使用,简单的说,就是将内 存中的数据保存到关系型数据库、 文件系统、消息队列等提供持久化支持的设备中。 持久层 就是系统中专注于实现数据持久化的相对独立的层面。 持久层设计的目标包括: -数据存储逻辑的分离,提供抽象化的数据访问接口。 -数据访问底层实现的分离,可以在不修改代码的情况下切换底层实现。 -资源管理和调度的分离,在数据访问层实现统一的资源调度(如缓存机制)。 -数据抽象,提供更面向对象的数据操作。 持久层框架有: -Hibernate -MyBatis -TopL ink -Guzz -jOOQ -Spring Data -ActiveJDBC 3、 Hibernate 中SessionFactory 是线程安全的吗? Session是线程安全的吗(两个线程 能够共享同一个 Session吗)? 答:SessionFactory 对应Hibernate 的一个数据存储的概念,它是线程安全的,可以被多 个线程并发访问。Sessi onF actory 一般只会在启动的时候构建。对于应用程序,最好将 SessionFactory 通过单例模式进行封装以便于访问。 Session是一个轻量级非线程安全的 对象(线程间不能共享 session ),它表示与数据库进行交互的一个工作单元。 Session是 由SessionFactory 创建的,在任务完成之后它会被关闭。 Session是持久层服务对外提供 的主要接口。Session会延迟获取数据库连接(也就是在需要的时候才会获取)。为了避免 创建太多的session,可以使用ThreadLocal将session和当前线程绑定在一起, 这样可以 让同一个线程获得的总是同一个 session 。 Hibernate 3 中SessionFactory 的 getCurre ntSessio n() 方法就可以做到。 4、 Hibernate 中Session 的load和get方法的区别是什么? 答:主要有以下三项区别: 如果没有找到符合条件的记录, get方法返回null,load方法抛出异常。 get方法直接返回实体类对象,load方法返回实体类对象的代理。 在Hibernate 3 之前,get方法只在一级缓存中进行数据查找,如果没有找到对应的数 据则越过二级缓存,直接发出 SQL语句完成数据读取;load方法则可以从二级缓存中获取 数据;从Hibernate 3 开始,get方法不再是对二级缓存只写不读, 它也是可以访问二级缓 存的。 说明:对于 说明:对于load()方法Hibernate 认为该数据在数据库中一定存在可以放 心的使用代理来实现延迟加载,如果没有数据就抛出异常,而通过 get()方 法获取的数据可以不存在。 5、 Session 的 save() 、update() 、merge() 、lock() 、saveOrUpdate() 禾口 persist。 方 法分别是做什么的?有什么区别? 答:Hibernate 的对象有三种状态:瞬时态(transient )、持久态(persistent )和游离态 (detached ),如第135题中的图所示。瞬时态的实例可以通过调用 save()、persist()或 者saveOrUpdate()方法变成持久态;游离态的实例可以通过调用 update。、 saveOrUpdate() 、lock()或者 replicate()变成持久态。save()和 persist()将会引发 SQL 的 INSERT 语句,而 update()或 merge()会引发 UPDATE 语句。save()和 update()的区别在 于一个是将瞬时态对象变成持久态,一个是将游离态对象变为持久态。 merge()方法可以完 成save()和update()方法的功能,它的意图是将新的状态合并到已有的持久化对象上或创 建新的持久化对象。对于 persist()方法,按照官方文档的说明:① persist()方法把一个瞬 时态的实例持久化,但是并不保证标识符被立刻填入到持久化实例中, 标识符的

文档评论(0)

1亿VIP精品文档

相关文档