广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 计算机学校 > 惠州计算机学校 > 正文

分享Java程序员MyBatis相关面试题_惠州计算机Java培训

作者:邓华发布时间:2021-06-23分类:惠州计算机学校浏览:1096


导读:MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,是Java程序员工作的好帮手,也是企业选拔人才时的常选题。接下来惠州北大青鸟就业部老师就给大家分享Java程序员MyBatis相关面试题。

       MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,是Java程序员工作的好帮手,也是企业选拔人才时的常选题。接下来惠州北大青鸟就业部老师就给大家分享Java程序员MyBatis相关面试题。

       1、Mybatis是如何将SQL执行结果封装为目标对象并返回的?都有哪些映射形式?

       答:一种是使用<resultMap>标签,逐一定义列名和对象属性名之间的映射关系。第二种是使用SQL列的别名功能,将列别名书写为对象属性名,比如T_NAME AS NAME,对象属性名一般是name,小写,但是列名不区分大小写,Mybatis会忽略列名大小写,智能找到与之对应对象属性名,你甚至可以写成T_NAME AS NaMe,Mybatis一样可以正常工作。

       有了列名与属性名的映射关系后,Mybatis通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。

       2、Mybatis是如何进行分页的?分页插件的原理是什么?

       答:Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在SQL内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

       分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的SQL,然后重写SQL,根据dialect方言,添加对应的物理分页语句和物理分页参数。

       举例:select * from student,拦截SQL后重写为:select t.* from (select * from student)t limit 0,10

       3、Mybatis的XML映射文件和Mybatis内部数据结构之间的映射关系?

       答:Mybatis将所有XML配置信息都封装到All-In-One重量级对象Configuration内部。在XML映射文件中,<parameterMap>标签会被解析为ParameterMap对象,其每个子元素会被解析为ParameterMapping对象。

       <resultMap>标签会被解析为ResultMap对象,其每个子元素会被解析为ResultMapping对象。每一个<select>、<insert>、<update>、<delete>标签均会被解析为MappedStatement对象,标签内的SQL会被解析为BoundSql对象。

       4、Mybatis动态SQL是做什么的?都有哪些动态SQL?能简述一下动态SQL的执行原理不?

       答:Mybatis动态SQL可以让我们在XML映射文件内,以标签的形式编写动态SQL,完成逻辑判断和动态拼接SQL的功能,Mybatis提供了9种动态SQL标签:trim|where|set|foreach|if|choose|when|otherwise|bind。

       其执行原理为,使用OGNL从SQL参数对象中计算表达式的值,根据表达式的值动态拼接SQL,以此来完成动态SQL的功能。

       5、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

       答:Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false。

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

       当然不光是Mybatis,几乎所有的包括Hibernate,支持延迟加载的原理都是一样的。

       除了以上老师整理的内容,企业会根据岗位实际需求进行调整。如果你想了解更多,可以来惠州北大青鸟新方舟校区了解一下Java课程,让你亲身教学效果,评价讲师的教学水平,了解学员的学习情况和就业情况!

java4.png

Java

标签:惠州软件开发培训惠州Java软件开发培训学校惠州Java软件开发基础惠州计算机Java软件开发惠州IT培训惠州Java软件开发知识惠州软件开发知识惠州计算机JAVA培训惠州java软件开发学校Java软件开发


惠州计算机学校排行
标签列表
网站分类
文章归档
最近发表