zoukankan      html  css  js  c++  java
  • 关于mybatis面试题

    1.为什么要使用 MyBatis开发你的项目?

    • SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。
    • Sql语句配置在XXXXmapper.xml文件中与java代码分离。
    • Mybatis自动将java对象映射至sql语句。
    • Mybatis自动将sql执行结果映射至java对象。

    2.#{}${}的区别是什么?

    •  #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
    •  $将传入的数据直接显示生成在sql中。
    • $方式一般用于传入数据库对象,例如传入表名。
    • #{}是预编译处理,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的set方法赋值。使用#{}可以有效的防止SQL注入。

    3.Xml映射文件中有哪些标签?

    • <select><insert><update><delete>
    • <resultMap>、<parameterMap>、<sql>、<include>(<sql>为sql片段标签,通过<include>标签引入sql片段)
    • if、choose (when, otherwise)、trim (where, set)、foreach、bind

    4.MyBatis有哪些映射规则?

    • Mapper.xml文件中的namespace即是mapper接口的类路径。
    • Mapper接口方法名和mapper.xml中定义的每个sqlid相同
    • Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql parameterType的类型相同
    • Mapper接口方法的输出参数类型和mapper.xml中定义的每个sqlresultType的类型相同

    5.MyBatis中命名空间(namespace)的作用?

    绑定DAO接口,保证这个映射文件中sql语句id的唯一性。

    6.DAO接口的工作原理

    Dao接口的工作原理是JDK动态代理,Mybatis运行时会为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。

    7.Dao接口里的方法,能否重载?

    不能重载,当调用接口方法时,命名空间+方法名,才可以唯一定位一个MappedStatement。(namespace+id是作为Map<String, MappedStatement>的key使用的

    8.Mybatis是如何将sql执行结果封装为目标对象?都有哪些映射形式?

    第一种是使用<resultMap>标签。第二种是使用别名。

    有了列名与属性名的映射关系后,Mybatis通过反射创建对象,同时使用反射给对象的属性逐一赋值。

    9.在mapper中如何传递多个参数?

    • DAO层的函数不带注解对应的xml,#{0}代表接收的是dao层中的第一个参数
    • 使用 @param 注解

    10.动态sql的执行原理?

    使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql。

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

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

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

  • 相关阅读:
    CocoaPods
    第一篇 理论 1.7 精进-正念-正知,如理作意和觉察力
    构架稳定与可扩展的优惠券系统
    一个产品从0到1的过程
    实现实时定位
    征信比拼重点是数据和连接
    黑产
    爬虫有什么用
    爬虫应用
    甘蔗理论
  • 原文地址:https://www.cnblogs.com/mcahkf/p/9138621.html
Copyright © 2011-2022 走看看