开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第44天,点击查看活动详情
MyBatis的mapping包
mapping 定义了 MyBatis 中众多的解析实体类。这些实体类有一些与 SQL语句相关,有一些与 SQL的输入/输出参数有关,有一些与配置信息有关。mapping包主要完成的功能如下。
- SQL语句处理功能;
- 输出结果处理功能;
- 输入参数处理功能;
- 多数据库处理功能;
SQL语句处理
在 mapping 包中,有三个处理SQL语句的类,它们是MappedStatement类、SqlSource类和 BoundSql类。其中 MappedStatement类表示的是数据库操作节点(select、insert、update、delete四类节点)内的所有内容;SqlSource类是数据库操作标签中包含的 SQL语句;BoundSql类则是SqlSource类的子类。
MappedStatement
MappedStatement对应xml中的数据库操作节点,包含有xml标签。其实就是个数据载体,记录了xml中的原始数据。
SqlSource类
SqlSource是一个解析器接口,对应 MappedStatement中的 SQL语句。SqlSource 本身是一个接口,接口中只定义了一个用以返回一个 BoundSql 对象的方法。SqlSource接口有四种实现类,如下:
- DynamicSqlSource:动态 SQL语句。动态 SQL是指含有动态 SQL节点(如“if”节点)或者含有“${}”占位符的语句。
- RawSqlSource:原生 SQL语句。指非动态语句,语句中可能含“#{}”占位符,但不含有动态 SQL节点,也不含有“${}”占位符。
- StaticSqlSource:静态语句。语句中可能含有“?”,可以直接提交给数据库执行。
- ProviderSqlSource:上面的几种都是通过 XML 文件获取的 SQL 语句,而ProviderSqlSource是通过注解映射的形式获取的 SQL语句。
BoundSql类
BoundSql是参数绑定完成后的 SQL语句,通过解析之后的SQL语句,和传入的参数以及一些环境信息。
ResultMap类
ResultMap类就是 resultMap节点对应的数据承载实体类,其属性和 resultMap节点的信息一致。
ResultMapping类
对应ResultMap类 的子节点,封装了属性的信息。