【Java面试】Mybatis篇

1.MyBatis编程步骤是什么样的?

① 创建SqlSessionFactory 
② 通过SqlSessionFactory创建SqlSession 
③ 通过sqlsession执行数据库操作 
④ 调用session.commit()提交事务 
⑤ 调用session.close()关闭会话

2.Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?

<resultMap>、<parameterMap>、<sql>、<include>、<selectKey>,加上动态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映射能力强,需要代码量少,开发速度快

猜你喜欢

转载自blog.csdn.net/snlx258/article/details/81483308
今日推荐