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 映射工具?它与全自动的区别在哪里?

相关推荐
程序员张32 小时前
Maven编译和打包插件
java·spring boot·maven
ybq195133454313 小时前
Redis-主从复制-分布式系统
java·数据库·redis
weixin_472339463 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
小毛驴8504 小时前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
枯萎穿心攻击4 小时前
响应式编程入门教程第二节:构建 ObservableProperty<T> — 封装 ReactiveProperty 的高级用法
开发语言·unity·c#·游戏引擎
DKPT4 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
Eiceblue5 小时前
【免费.NET方案】CSV到PDF与DataTable的快速转换
开发语言·pdf·c#·.net
好奇的菜鸟6 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
m0_555762906 小时前
Matlab 频谱分析 (Spectral Analysis)
开发语言·matlab
DuelCode7 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis