zoukankan      html  css  js  c++  java
  • Mybatis常见面试题(三)

    Mybatis 映射文件中,如果 A 标签通过 include 引用了 B 标签的内容,请问, B 标签能
    否定义在 A 标签的后面,还是说必须定义在 A 标签的前面?
    :虽然 Mybatis 解析 Xml 映射文件是按照顺序解析的,但是,被引用的 B 标签依然可以
    定义在任何地方, Mybatis 都可以正确识别。原理是, Mybatis 解析 A 标签,发现 A 标签引
    用了 B 标签,但是 B 标签尚未解析到,尚不存在,此时, Mybatis 会将 A 标签标记为未解
    析状态,然后继续解析余下的标签,包含 B 标签,待所有标签解析完毕, Mybatis 会重新
    解析那些被标记为未解析的标签,此时再解析 A 标签时, B 标签已经存在, A 标签也就可
    以正常解析完成了。
    Mybatis Xml 映射文件中,不同的 Xml 映射文件, id 是否可以重复?
    不同的XML文件,如果配置了namespace,那么id可以重复,如果没有篇日志namespace,那么id不能重复,

    比较namespace不是必须的,只是最佳实践而已,原因就是namespace+id是作为Map<String,MappedSrarement>的key使用的

    ,自然id就可以重复,namespace不同,namespace+id自然也就不同。

    Mtbatis中如何处理批执行?

    :使用BatchExecutor完成批处理。

    Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?
    :Mybatis中有三种Executor执行器,SimpleExectuor,ReuseExecutor,BatchExecutor。

    1.SimpleExecutor:每执行一次update或者select,就开启一个Statement对象,用完like关闭Statement对象。

    2.ReuseExecutor:执行update或者select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,

    不关闭Satement对象,二十放置于Map

    3.BatchExecutor:完成批处理。

    Mybatis 中如何指定使用哪一种 Executor 执行器?
    在Mybatis配置文件中,可以指定默认的ExectorType执行器类型,也可以手动给DefaultSqlSessionFactory的创建SqlSession的方法传递ExecutorType类型参数。

    Mybatis执行批量插入,能返回数据库主键列表吗?

    :可以,JDBC可以,Mybatis也可以。

    Mybatis 是否可以映射 Enum 枚举类 ?
    :Mybatis可以映射枚举类,不单可以映射枚举类,Mybatis可以映射任何对象到表的一列上。

    映射方式为自定义一个TypeHandler,实现TypeHandler的setParameter()和getResulr()接口方法。

    TypeHandler有两个作用,意识完成从javaType至getResult()两个方法,分别代表设置sql问号占位符参数和获取列查询结果。

    如何获取自动生成的()键值?
    :配置文件设置usegeneratedkeys为true。

    在Mapper中如何传递多个参数?

    1)直接在方法中传递参数, xml 文件用#{0} #{1}来获取
    2)使用 @param 注解:这样可以直接在 xml 文件中通过#{name}来获取
    resultType resultMap 的区别?
    1.类的名字和数据库相同时,可以直接设置resultType参数为pojo类。

    2.若不同,需设置resultMap将结果名字和pojo名字进行转换。

    使用 MyBatis mapper 接口调用时有哪些要求?
    1.Mapper接口方法名和mapper.xml中定义的买个sql的id相同。

    2.Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同。

    3.Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

    4.Mapper.xml文件中的namespace即是接口的类路径。

    Mybatis IBatis 比较大的几个改进是什么?
    1.有接口绑定,包括注解绑定sql和xml绑定sql。

    2.动态sql由原来的节点配置改为OGNL表达式

    3.在一对一,一对多的时候引进了association,在一对多的时候引入了collection节点,

    不过都是在resultMap里面配置

    IBatis MyBatis 在核心处理类分别叫什么?
    :IBatis里面的核心处理类叫SqlMapClient,Mybatis里面的核心处理类叫做SqlSession。

    IBatis MyBatis 在细节上的不同有哪些?
    1.在sql里面变量命名由原来的#变量#,变成了#{变量}

    2.原来的$变量$,变成了${}

    3.原来在sql节点里面的class都换名字叫type

    4.原来的queryForObject queryForList 变成了selectOne selectList

    5.原来的别名设置在映射文件里面放在了核心配置文件里。

    岁月无声无息的溜走,除了带走一个无聊者的时光,还会沉淀一个努力者的人生。
  • 相关阅读:
    主席树学习记录
    P1072 Hanson 的趣味题 题解
    好文章收集
    计算几何专题
    小问题
    CSP-S2020题解
    上下界网络流
    想到的无法解决的点子
    省选联考2020组合数问题
    省选数学复习
  • 原文地址:https://www.cnblogs.com/dayandday/p/10838350.html
Copyright © 2011-2022 走看看