MyBatis面试题(二)

*爱你&永不变心* 提交于 2020-03-11 02:32:04
  1. 说说什么是MyBatis的接口绑定?
    答:在MyBatis项目中定义任意的接口,并将接口里面的方法和sql语句进行绑定,这样可以直接通过接口方法来调用相应的sql语句,这就是接口绑定。

  2. MyBatis的接口绑定有哪些实现方式?
    答:一种是通过注解来绑定,在接口的方法上加上@Select、@Update这些注解,注解里面的参数就是要运行的sql语句。另外一种就是直接在xml文件里写sql,通过xml文件里namespace这个标签的值来确定对应的到底是哪个接口,所以namespace要是接口的全限定名。

  3. 什么情况下用注解绑定,什么情况下用xml绑定?
    答:当SQL语句比较简单时候,用注解绑定,当SQL语句比较复杂时候,用xml绑定。但是个人建议还是用xml绑定的好,因为在业务的发展中,SQL只会越来越复杂,就没见过几个SQL由繁入简的例子,所以不如一开始就写在xml文件里,省事。

  4. 使用MyBatis的mapper接口调用时有哪些要求?
    答:首先xml文件里的namespace要和mapper接口的全路径一样,这样才能一一对应,其次mapper接口的方法名要和xml文件中定义的每个sql的id一样,这样方法才能对应,最后就是mapper接口中方法的返回值和参数要和其在xml文件中对应sql的parameterType以及resultType的类型相同。

  5. Mybatis是否支持延迟加载?
    答:Mybatis仅支持一对一关联对象和一对多关联集合对象的延迟加载,在Mybatis配置文件中,可以配置【lazyLoadingEnabled=true|false】命令来决定是否启用延迟加载。

  6. 延迟加载实现原理是什么?
    答:它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,会进入拦截器方法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a对象中的b属性就有值了,接着继续a.getB().getName()方法的调用,这就是延迟加载的基本原理。

  7. Mybatis将sql执行结果封装为目标对象的映射形式都有哪些?
    答:
    第一种是使用< resultMap >标签,逐一定义数据库列名和对象属性名之间的映射关系。
    第二种是使用sql列的别名功能,这里列的别名就用对象的属性名了。

  8. Mybatis是如何根据映射形式将数据库对象转为实体对象的?
    答:通过使用两种映射形式,让数据库列名与实体类的属性名的有了一一对应的映射关系后,Mybatis会通过反射来创建对象,同时使用反射给对象的属性逐一赋值并返回,而那些找不到映射关系的属性,就没法赋值成功。

  9. Mybatis如何执行批量插入?
    答:循环调用插入单条数据的接口。

  10. 在mapper中如何传递多个参数?
    答:这里只建议一种,通过使用@param注解来做参数的传递和绑定,这种方法使用起来思路更清晰。

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