Java面试题之Mybatis篇
1.MyBatis编程步骤是什么样的?
①创建SqlSessionFactory
②通过SqlSessionFactory创建SqlSession
③通过sqlsession执行数据库操作
④调用session.commit()提交事务
⑤调用session.close()关闭会话
2.Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?
、、、、,加上动态sql的9个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等
3.#{}和${}的区别是什么?
#{}是预编译处理,${}是字符串替换。
Mybatis在处理#{}时,会将sql中的#{}替换为号,调用PreparedStatement的set方法来赋值;
Mybatis在处理${}时,就是把${}替换成变量的值。
使用#{}可以有效的防止SQL注入,提高系统安全性。
4.Mybatis是如何进行分页的?分页插件的原理是什么?
Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。
5.Mybatis缓存机制
MyBatis有两级缓存
一级缓存是SqlSession级别的缓存,他的作用域是同一个SqlSession,在同一个sqlSession中执行相同的Sql语句,第一次执行完毕的会将结果集写到缓存中,第二次就会从缓存中获取数据;
二级缓存是mapper级别的缓存,作用域是mapper的同一个namespace,不同的sqlsession在同一个namespace下执行相同的sql语句,第一次查询的结果缓存到缓存中,第二次则可从缓存中获取数据。
Mybatis默认开启一级缓存,没有开启二级缓存,二级缓存需要在xml配置中手动配置开启。
6.Mybatis与Hibernate比较
1.MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
2.MyBatis容易掌握,而Hibernate门槛较高。
3.Hibernate功能强大,数据库无关性好,O/R映射能力强,需要代码量少,开发速度快