当前位置: 首页 > news >正文

Mybatis面试系列六

1、Mybatis 动态sql有什么用?执行原理?有哪些动态sql?
Mybatis 动态 sql 可以在 Xml 映射文件内,以标签的形式编写动态 sql,执行原理
是根据表达式的值完成逻辑判断并动态拼接sql的功能。
Mybatis 提供了 9种动态 sql标签:trim | where | set | foreach | if | choose
| when | otherwise | bind。
2、Xml映射文件中,除了常见的select|insert|updae|delete
标签之外,还有哪些标签?
答:

<resultMap>、<parameterMap>、<sql>、<include>、
<selectKey>

,加上动态 sql 的 9 个标签,其中<sql>为 sql 片段标签,通过
<include>标签引入 sql 片段,<selectKey>为不支持自增的主键生成策略标
签。
3、Mybatis 的 Xml 映射文件中,不同的 Xml映射文件,id是否可以重复?
不同的Xml映射文件,如果配置了namespace,那么 id可以重复;如果没有配
置 namespace,那么 id 不能重复;
原因就是namespace+id 是作为 Map<String, MapperStatement>的 key
使用的,如果没有namespace,就剩下 id,那么,id重复会导致数据互相覆盖。
有了namespace,自然 id 就可以重复,namespace 不同,namespace+id 自然
也就不同。
4、为什么说Mybatis是半自动ORM映射工具?它与全自动
的区别在哪里?
Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联
集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而Mybatis
在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自
动 ORM映射工具。
5、 一对一、一对多的关联查询 ?

<mapper namespace="com.lcb.mapping.userMapper"><!--association 一对一关联查询--><select id="getClass" parameterType="int"resultMap="ClassesResultMap">select * from class c,teacher t where c.teacher_id=t.t_id and c.c_id=#{id}</select><resultMap type="com.lcb.user.Classes" id="ClassesResultMap"><!--实体类的字段名和数据表的字段名映射--><id property="id" column="c_id"/><result property="name" column="c_name"/><association property="teacher" javaType="com.lcb.user.Teacher"><id property="id" column="t_id"/><result property="name" column="t_name"/></association></resultMap><!--collection一对多关联查询--><select id="getClass2" parameterType="int" resultMap="ClassesResultMap2">select * from class c,teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id=#{id}</select><resultMap type="com.lcb.user.Classes" id="ClassesResultMap2"><id property="id" column="c_id"/><result property="name" column="c_name"/><association property="teacher" javaType="com.lcb.user.Teacher"><id property="id" column="t_id"/>
<result property="name" column="t_name"/></association><collection property="student" ofType="com.lcb.user.Student"><id property="id" column="s_id"/><result property="name" column="s_name"/></collection></resultMap></mapper>

阿里云618精选云产品限量热卖,助力低成本上云


相关文章:

  • 博科SAN交换机初始化和Zone创建
  • 分布式管理
  • visual studio 2022使用全版本平台工具集
  • 2024福建等保测评公司有哪些?分别叫做什么名字?
  • 826. 安排工作以达到最大收益
  • Android 13 高通设备热点低功耗模式(2)
  • 2021年9月电子学会青少年软件编程 中小学生Python编程等级考试三级真题解析(判断题)
  • openssl工具国际/国密签名命令行流程
  • Web前端与其他前端:深度对比与差异性剖析
  • AlmaLinux 8.10 x86_64 OVF (sysin) - VMware 虚拟机模板
  • Python酷库之旅-比翼双飞情侣库(08)
  • flutter报错You are currently using Java 1.8
  • 每日5题Day24 - LeetCode 116 - 120
  • Ollama在MacOS、Linux本地部署千问大模型及实现WEB UI访问
  • 手机IP地址距离多远会变:解析移动设备的网络定位奥秘
  • 【刷算法】求1+2+3+...+n
  • Apache的80端口被占用以及访问时报错403
  • Debian下无root权限使用Python访问Oracle
  • Java知识点总结(JavaIO-打印流)
  • Linux快速复制或删除大量小文件
  • Making An Indicator With Pure CSS
  • Protobuf3语言指南
  • vue 配置sass、scss全局变量
  • 闭包--闭包作用之保存(一)
  • 前端路由实现-history
  • 如何设计一个比特币钱包服务
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # .NET Framework中使用命名管道进行进程间通信
  • (纯JS)图片裁剪
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (十三)Maven插件解析运行机制
  • (十五)使用Nexus创建Maven私服
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)ABI是什么
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net 调用php,php 调用.net com组件 --
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • .ui文件相关
  • 。Net下Windows服务程序开发疑惑
  • /var/lib/dpkg/lock 锁定问题
  • @staticmethod和@classmethod的作用与区别
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ 蓝桥杯Web真题 ]-布局切换
  • [.NET]桃源网络硬盘 v7.4
  • [000-01-011].第2节:持久层方案的对比
  • [12] 使用 CUDA 加速排序算法
  • [20190113]四校联考
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured