Mybatis面试题(三)

2023-09-18 20:39:59


前言

  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<String, MappedStatement>的 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 执行批量插入,能返回数据库主键列表吗?
更多推荐

Zero-Shot 使用简单两层网络不用训练就能进行图像恢复

文章今天要分享的文章是CVPR2023比较有意思的一篇《Zero-ShotNoise2Noise:EfficientImageDenoisingwithoutanyData》,通过简单的两层网络,并且不需要数据训练直接进行图像恢复代码https://colab.research.google.com/drive/1i8

Si314 低功耗 14 通道电容触摸传感器,软硬件兼容替代GTX314L

Si314是一款具有自动灵敏度校准功能的14通道电容传感器,其工作电压范围为1.8~5.5V。Si314设置休眠模式来节省功耗,此时,功耗电流为10uA@3.3V。Si314各个感应通道可实现独立使能、校准、灵敏度调节,可以确保可靠性,且具有自适应滤波功能,以应对各种噪音和环境变化。I2C串行接口可以读写内部寄存器,检

OpenStack创建云主机并连接CRT

文章目录OpenStackT版创建云主机并连接CRT命令行操作(1)创建镜像(2)创建实例(3)创建网络创建内网创建外网(4)创建安全组(5)创建路由(6)创建云主机(7)绑定浮动IP(8)登录云主机(9)CRT连接图形化操作(1)创建镜像(2)创建实例(3)创建网络创建内网创建外网(4)创建安全组(5)创建路由(6)

MTR 网络连通性测试工具 基础入门 整理

MTRMTR的全称是mytraceroute,是一个集合了ping与traceroute功能的网络诊断工具,广泛应用于链路测试。相对于traceroute只会做一次链路跟踪测试,mtr会对链路上的相关节点做持续探测并给出相应的统计信息。因此,mtr能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。安装

Vue进阶(幺陆玖)信创适配改造

文章目录一、前言二、方案实施2.1存在的问题2.2方案优化2.3User-Agent详解三、拓展阅读一、前言随着外部监管对国产化的要求越来越高,所在产品团队信创专项改造工作开始实施,需求如下:信创平台控件只能使用在信创终端使用,不能应用在Windows上,存量系统运行过程中需要能够识别业务人员当前使用的终端操作系统,若

【算法练习Day3】 移除链表元素&&设计链表&&反转链表

​​📝个人主页:@Sherry的成长之路🏠学习社区:Sherry的成长之路(个人社区)📖专栏链接:练题🎯长路漫漫浩浩,万事皆有期待文章目录移除链表元素其他问题设计链表其他问题反转链表其他问题总结:移除链表元素203.移除链表元素-力扣(LeetCode)链表问题大多都可以用虚拟头结点的方法,使链表的插入和删除操

实施主品牌进化战略(三):建立产品竞争与进化体系

产品早晚都会抵达成熟期,所以建立一个有效的产品竞争与进化体系,才能保障产品更新迭代与时俱进在跨周期中实现增长和主品牌进化。同时这也是工业制造、汽车制造、软件开发、食品饮料、人工智能等行业强者穿越周期的战略共性。3M:以超级技术打造产品竞争与进化体系3M公司,诞生于1902年,以胶粘技术起家,后发展出光学、医疗、研磨以及

写在2023,转行软件测试的我后悔了吗?

前言朋友,作为一个曾经从机械转行到IT的行业的过来人,已在IT行业工作5年,分享一下我的经验,供你参考。讲真,现在想通过培训班培训几个月就进入IT行业,越来越来难了;如果是在2018年以前,还有机会,一方面,那个时候IT行业还不算卷,需求还是蛮大的;但最近这一两年,由于大环境不好,很多互联网大厂都开始裁员了,连科班出身

计算机网络与技术——物理层

😊计算机网络与技术——物理层👻物理层的基本概念👻数据通信基础知识🚢数据通信系统的模型🚢信道的基本概念🚢信道的极限容量👻物理层下面的传输媒体🔊导引型传输媒体🔊非导引型传输媒体👻信道复用技术🥏频分复用、时分复用和统计时分复用🥏波分复用🥏码分复用👻宽带接入技术☃️ADSL技术☃️光纤同轴混合网(H

强强联合,波卡生态正成为物联网赛道关键入口

自5月23日,波卡平行链之一Peaq宣布将特斯拉和去中心化汽车共享应用引入Polkadot生态系统后,其以打造Polkadot上Web3汽车共享的未来为目标,开启物联网发展的新时代;而在近期,Peaq又表示将在9月前往德国慕尼黑IAAMOBILITY2023,作为L1底层架构参与特斯拉和捷豹汽车的现场演示。在这场展示活

什么是边缘计算网关?

边缘计算网关(简称边缘网关)将云端功能扩展到本地的边缘设备,使边缘设备能够快速自主地响应本地事件,提供低延时、低成本、隐私安全、本地自治的本地计算服务。同时所有服务都以Docker镜像方式安装,真正做到了跨平台,部署快捷,易管理。在链路安全,应用场景,云开发组件等也都做到了非常好的支持。涂鸦提供了丰富的物联网协议,客户

热文推荐