MyBatis面试题(三)

China☆狼群 提交于 2020-03-11 02:21:38
  1. 说说对ORM的理解?
    答:ORM就是所谓的对象关系映射,通过这门技术,可以让程序中的实体对象和数据库的记录做到互相映射,对象可以借此持久化到数据库记录,数据库记录也能借此转化为实体对象。

  2. 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
    答:Hibernate就属于全自动ORM映射工具,因为使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而 Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。

  3. 你对MyBatis的一级缓存和二级缓存有了解吗,说一下?
    答:MyBatis默认只开启一级缓存,一级缓存是对同一个SqlSession起作用,在使用SqlSession第一次查询后,MyBatis会将结果缓存起来,如果下次再使用同一个SqlSession调用Mapper方法,sql的参数也完全相同,如果没有声明需要刷新,同时缓存也没有超时,那SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库做查询。
    MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。SqlSessionFactory层面上的二级缓存默认是不开启的,二级缓存的开启需要进行配置,实现二级缓存的时候,MyBatis要求返回的POJO必须是可序列化的。 也就是要求实现Serializable接口,配置方法很简单,只需要在映射XML文件配置就可以开启缓存了。

  4. 说说对MyBatis的parameterType怎么理解的?
    答:MyBatis使用parameterType来指定参数类型。我们xml文件的sql里一般都是用#{}来做参数的赋值的,底层其实是使用了反射,一般我们在#{}里都会写上实体类的属性名,然后把属性名和get做拼接,用反射来获取属性值,然后设置到sql里。

  5. 说说对MyBatis的resultType是怎么理解的?
    答:MyBatis使用resultType来指定返回类型。底层也是用了反射,在用select语句获取到相应结果集后,会把结果集的列名和set做拼接,通过反射来设值,所以这里的列名只要和返回类型的属性名一样,就能够做到把结果集的值赋值给对象里对应的属性。

  6. MyBatis中resultMap用过吗,它是干什么的?
    答:MyBatis通过resultMap来描述了数据库表的列与Java对象属性之间的对应关系。

  7. Mybatis是如何进行分页的?
    答:Mybatis使用RowBounds对象或者直接编写sql实现分页,不过这里推荐使用
    Mybatis的分页插件来实现分页。

  8. 说说分页插件的原理?
    答:插件中的拦截方法内会拦截待执行的sql,然后重写sql语句,强行加上分页所需的语句。比如把 【select id from user】 改成 【select t.id from (select id from user) t limit 0,6】。

  9. 简述一下动态SQL的执行原理?
    答:动态SQL的执行原理,其实是使用OGNL从SQL参数对象中计算出表达式的值,根据表达式的值动态的拼接SQL,以此来完成动态SQL的功能。

  10. 说说Statement和PrepareStatement的区别?
    答: PreparedStatement表示的是预编译的SQL语句的对象,如果对数据库只做一次性存取时,使用Statement对象,而如果不是只做一次存取,还有后续执行操作时,使用PreparedStatement对象,因为PreparedStatement使用的是占位符,是预编译的,虽然第一次执行消耗比较高,但是批处理的效率比Statement对象高。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!