java面试题-持久层十
什么是ORM?
对象关系映射(Object-Relational-Mappeing,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术.
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据(在java中可以用XML或者注解),将程序中的对象自动持久化到关系数据库中,或者将关系数据库表中的行转换成java对象,其本质上就是将数据从一种形式转换到另外一种形式.
Hibernate中SessionFactory是线程安全吗?Sission是线程安全的吗?(两个线程能够共享一个Session吗)?
SessionFactory对应Hibernate的一个数据存储的概念,它是线程安全的,可以被多个线程并发访问,SessionFactory一般只在启动的时候创建,对应用程序,最好将SessionFactory通过单例模式进行封装以便于访问.
Session是一个轻量级的非线程安全的对象(线程间不能共享Session),它表示与数据库进行交互的一个工作单元.Session是由SessionFactory创建的,在任务完成后需要关闭,Session是持久层服务对外提供的主要接口.
Session会延迟获取数据库连接(也就是在需要的时候才会获取),为了避免创建太多的Session,可以使用ThreadLocal将Session和当前线程绑定在一起,这样可以让同一个线程总是获取同一个session,Hibernate3中,SessionFactory的getCurrentSession()方法就可以做到.
Session的save(),update(),merge(),lock(),saveOrUpdate(),和persist()方法分别是做什么的?有什么区别?
hibernate的对象有三种状态:顺势态(transient) 持久态(persistent) 游离态(detached)
瞬时态可以通过调用save(),persist(),或者saveOrUpdate()方法编程持久态;
JDBC编程有哪些不足之处,Mybatis是如何解决的?
1.JDBC:数据库链接创建,释放频繁,造成系统资源浪费,从而影响系统性能,使用数据库连接池可以解决此问题.
Mybatis:在sqlMapConfig.xml中配置数据库连接池,使用连接池管理数据库链接
2.JDBC:sql语句写在代码中在曾代码不易维护,因为实际中sql变化较大,而sql改变,java代码也要改变
Mybatis:将sql语句配置在xxmapper.xml文件中,与java代码分离
3.JDBC:向sql语句传递参数麻烦,因为sql语句的where条件不一定,占位符要和参数一一对应
Mybatis:自动将java对象映射至sql语句
4.JDBC:对结果集处理麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便
Mybatis:自动将sql执行结果映射至java对象.