Java 5.3 - MyBatis

#{} 和 ${} 的区别是什么?

${} 是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如 ${driver} 被静态替换为 com.mysql.jdbc.Driver

#{} 是 sql 的参数占位符

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

Dao 接口工作的原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?

最佳实践中,通常一个 xml 映射文件,就会写一个 Dao 接口与之对应。Dao 接口就是人们常说的 Mapper 接口,接口的全限名,就是映射文件中 namespace 的值;接口的方法名,就是映射文件中 MappedStatement 的 id 值;接口方法内的参数,就是传递给 sql 的参数。

* 全限名

Dao 接口里的方法可以重载,但是 Mybatis 的 xml 里面的 ID 不允许重复。

这里使用了动态 sql 进行实现方法重载。

补充:Dao 接口方法可以重载,但是需要满足以下条件

1、仅有一个无参方法和一个有参方法

2、多个有参方法时,参数数量必须一致。且使用相同的 @Param

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

简述 Mybatis 的插件运行原理,以及如何编写一个插件。

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

可以

JDBC 都可以,Mybatis 当然也可以。

Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理吗?

Mybatis 动态 sql 可以让我们在 xml 映射文件中,以标签的形式编写动态 sql,完成逻辑判断和动态拼接 sql 的功能。

执行原理:使用 OGNL 从 sql 参数对象中计算表达式的值,根据表达式的值动态拼接 sql,以此来完成动态 sql 的功能。

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

1、使用 resultMap 标签,逐一定义列明和对象属性名之间的映射关系。

2、使用 sql 列的别名功能,将列别名书写为对象属性名⽐如 T_NAME AS NAME,对象属性名⼀般是 name,⼩写,但是列名不区分⼤⼩写,MyBatis 会忽略列名⼤⼩写,智能找到与之对应对象属性 名,你甚⾄可以写成 T_NAME AS NaMe,MyBatis ⼀样可以正常⼯作。

有了列明和属性名之间的映射,Mybatis 通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回,找不到映射关系的属性是无法完成赋值的。

Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别。

Mybatis 可以执行一对一、一对多、多对多、多对一的关联查询。

* 关联查询:是指在关系型数据库中,通过将多个表的数据关联起来,来获取所需的信息。

一对一

XML 复制代码
<resultMap id="userResultMap" type="User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
    <association property="address" column="address_id" select="com.example.mapper.AddressMapper.selectAddressById"/>
</resultMap>

一对多

XML 复制代码
<resultMap id="userResultMap" type="User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
    <collection property="orders" ofType="Order" column="user_id" select="com.example.mapper.OrderMapper.selectOrdersByUserId"/>
</resultMap>

Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?

Mybatis 的 xml 映射文件中,不同的 xml 映射文件,id是否可以重复?

Mybatis 中如何执行批处理?

使用 BatchExecutor 完成批处理

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

有三种基本的 Executor 执行器:

作用范围:Executor 的这些特点,都严格限制在 SqlSession 生命周期范围内。

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

Mybatis 是否可以映射 Enum 枚举类?

Mybatis映射⽂件中,如果 A 标签通过 include 引⽤了 B 标签的内容,请问,B 标签能否定义在 A 标签的后⾯,还是说必须定义在 A 标签的前⾯?

简述 Mybatis 的 xml 映射文件和 Mybatis 内部数据结构之间的映射关系?

为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?

相关推荐
蓑 羽2 分钟前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode
Reese_Cool10 分钟前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言
海里真的有鱼11 分钟前
Spring Boot 项目中整合 RabbitMQ,使用死信队列(Dead Letter Exchange, DLX)实现延迟队列功能
开发语言·后端·rabbitmq
工业甲酰苯胺21 分钟前
Spring Boot 整合 MyBatis 的详细步骤(两种方式)
spring boot·后端·mybatis
zxctsclrjjjcph26 分钟前
【C语言】常见的C语言概念
c语言·开发语言
小灰灰爱代码31 分钟前
C++——求3个数中最大的数(分别考虑整数、双精度数、长整数的情况),用函数模板来实现。
开发语言·c++·算法
严文文-Chris35 分钟前
【设计模式-享元】
android·java·设计模式
Eiceblue38 分钟前
Python 复制Excel 中的行、列、单元格
开发语言·python·excel
项目題供诗42 分钟前
尚品汇-秒杀商品存入缓存、Redis发布订阅实现状态位(五十一)
开发语言·php