Mybatis面试题系列四

作者 : admin 本文共1005个字,预计阅读时间需要3分钟 发布时间: 2024-06-9 共1人阅读

1、通常一个Xml映射文件,都会写一个Dao接口与之对应,
请问,这个Dao接口的工作原理是什么?Dao接口里的方法,
参数不同时,方法能重载吗?
Dao 接口即 Mapper 接口。接口的全限名,就是映射文件中的 namespace的值;
接口的方法名,就是映射文件中Mapper的Statement的id值;接口方法内的
参数,就是传递给sql的参数。
Mapper 接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符
串作为key 值,可唯一定位一个MapperStatement。在 Mybatis 中,每一个
、、、标签,都会被解析为一个
MapperStatement 对象。
举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯
一找到namespace为 com.mybatis3.mappers.StudentDao 下面 id 为
findStudentById 的 MapperStatement。
Mapper 接口里的方法,是不能重载的,因为是使用全限名+方法名的保存和寻
找策略。Mapper 接口的工作原理是JDK动态代理,Mybatis运行时会使用 JDK
动态代理为Mapper 接口生成代理对象proxy,代理对象会拦截接口方法,转而
执行MapperStatement 所代表的 sql,然后将 sql 执行结果返回。
2、Mybatis是如何进行分页的?分页插件的原理是什么?
Mybatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内
存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分
页功能,也可以使用分页插件来完成物理分页。
分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件
的拦截方法内拦截待执行的sql,然后重写 sql,根据 dialect 方言,添加对应的物
理分页语句和物理分页参数。
3、Mybatis是如何将sql执行结果封装为目标对象并返回的?
都有哪些映射形式?
第一种是使用标签,逐一定义数据库列名和对象属性名之间的映
射关系。
第二种是使用sql列的别名功能,将列的别名书写为对象属性名。有了列名与属性名的映射关系后,Mybatis通过反射创建对象,同时使用反射给
对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。
阿里云“99计划”,新老同享,低价长效,助力开发者普惠上云!

本站无任何商业行为
个人在线分享 » Mybatis面试题系列四
E-->