码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Mybatis面试题(三)


    文章目录

    • 前言
    • 一、Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
    • 二、当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定 pojo?
    • 三、模糊查询 like 语句该怎么写
    • 四、通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, Dao 的工作原理,是否可以重载?
    • 五、Mybatis 映射文件中,如果 A 标签通过 include 引用了 B 标签的内容,请问,B 标签能否定义在 A 标签的后面,还是说必须定义在 A 标签的前面?
    • 六、Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
    • 七、Mybatis 中如何执行批处理?
    • 八、Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?
    • 九、Mybatis 中如何指定使用哪一种 Executor 执行器?
    • 十、Mybatis 执行批量插入,能返回数据库主键列表吗?
    • 总结


    前言

    1. Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
    2. 当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定 pojo?
    3. 模糊查询 like 语句该怎么写
    4. 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, Dao 的工作原理,是否可以重载?
    5. Mybatis 映射文件中,如果 A 标签通过 include 引用了 B 标签的内容,请问,B 标签能否定义在 A 标签的后面,还是说必须定义在 A 标签的前面?
    6. Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
    7. Mybatis 中如何执行批处理?
    8. Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?
    9. Mybatis 中如何指定使用哪一种 Executor 执行器?
    10. Mybatis 执行批量插入,能返回数据库主键列表吗?

    一、Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?

    答:还有很多其他的标签,resultMap、parameterMap、sql、include、selectKey,加上动态 sql 的 9 个标签,
    trim|where|set|foreach|if|choose|when|otherwise|bind 等,其中sql为 sql 片段标签,通过include标签引入 sql 片段,selectKey为不支持自增的主键生成策略标签。


    二、当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定 pojo?

    1. 通过在查询的 sql 语句中定义字段名的别名。
    2. 通过resultMap来映射字段名和实体类属性名的一一对应的关系。

    三、模糊查询 like 语句该怎么写

    答:

    1. 在 java 中拼接通配符,通过#{}赋值
    2. 在 Sql 语句中拼接通配符 (不安全 会引起 Sql 注入)

    四、通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, Dao 的工作原理,是否可以重载?

    不能重载,因为通过 Dao 寻找 Xml 对应的 sql 的时候全限名+方法名的保存和寻找策略。接口工作原理为 jdk 动态代理原理,运行时会为 dao 生成 proxy,代理对象会拦截接口方法,去执行对应的 sql 返回数据。


    五、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的 key 使用的,如果没有namespace,就剩下 id,那么,id 重复会导致数据互相覆盖。有了 namespace,自然 id 就可以重复,namespace 不同,namespace+id 自然也就不同。


    七、Mybatis 中如何执行批处理?

    答:使用 BatchExecutor 完成批处理。


    八、Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?

    答:Mybatis 有三种基本的 Executor 执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。

    1. SimpleExecutor:每执行一次 update 或 select,就开启一个 Statement 对象,用完立刻关闭 Statement 对象。
    2. ReuseExecutor:执行 update 或 select,以 sql 作为key 查找 Statement 对象,存在就使用,不存在就创建,用完后,不关闭 Statement 对象,而是放置于 Map
    3. BatchExecutor:完成批处理。

    九、Mybatis 中如何指定使用哪一种 Executor 执行器?

    答:在 Mybatis 配置文件中,可以指定默认的 ExecutorType 执行器类型,也可以手动给DefaultSqlSessionFactory 的创建SqlSession 的方法传递 ExecutorType 类型参数。


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

    答:能,JDBC 都能,Mybatis 当然也能。


    总结

    1. Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
    2. 当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定 pojo?
    3. 模糊查询 like 语句该怎么写
    4. 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, Dao 的工作原理,是否可以重载?
    5. Mybatis 映射文件中,如果 A 标签通过 include 引用了 B 标签的内容,请问,B 标签能否定义在 A 标签的后面,还是说必须定义在 A 标签的前面?
    6. Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
    7. Mybatis 中如何执行批处理?
    8. Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?
    9. Mybatis 中如何指定使用哪一种 Executor 执行器?
    10. Mybatis 执行批量插入,能返回数据库主键列表吗?
  • 相关阅读:
    论文阅读:Editing Large Language Models: Problems, Methods, and Opportunities
    Kmeans特征降维方法
    Swift 判断 A B 两个时间是不是同一天,A 是不是 B 的昨天
    电源效率测试标准你知道多少?纳米软件带您了解
    【数据结构】树(七)—— 哈夫曼树(C语言版)
    “SonarQube requires Java 11+ to run“ for java 1.8.0_221
    新版校园跑腿外卖独立版+APP+小程序前端外卖配送平台源码
    解决远程到windows2012r2服务器提示credssp加密oracle修正
    systemd-modules-load.service
    【理论学习】Vision-Transformer
  • 原文地址:https://blog.csdn.net/weixin_47924016/article/details/132995489
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号