mybatis是如何根据映射器(mapper.xml文件)生成sql语句?

mybatis是如何根据映射器(mapper.xml文件)生成sql语句?

  1. 当XMLConfigBuilder解析映射器xml文件时,会将每一个SQL语句和其配置的内容保存起来。

  2. 一般而言,在mybatis中一条SQL与它相关的配置信息是由MappedStatement、SqlSource和BoundSql等三个部分组成的。

  3. MappedStatement的作用是保存一个映射器节点(select|insert|delete|update)的内容,它是一个类,包括许多我们配置的SQL、SQL的id、缓存信息、resultMap、parameterType、resultMap、languageDriver等重要配置内容,同时还有一个重要的属性sqlSource。mybatis通过读取MappedStatement来获得某条SQL配置的所有信息。

  4. SqlSource是提供BoundSql对象的地方,它是一个接口,而不是实现类。它的作用是根据上下文和参数解析生成需要的SQL,例如,动态SQL采取了DynamicSqlSource配合参数进行解析后得到的。这个接口只定义了一个接口方法——getBoundSql(parameterObject),使用它就可以得到一个BoundSql对象。它有几个重要的实现类:DynamicSqlSource、ProviderSqlSource、RawSqlSource和StaticSqlSource。

  5. BoundSql是一个结果对象,也就是SqlSource通过对SQL和参数的联合解析得到的SQL和参数,它是建立SQL和参数的地方。它有三个常用的属性:sql、parameterObject、parameterMappings。

  • parameterObject为参数本身,可以传递简单对象、pojo或者map、@Param注解的参数。
  • parameterMappings是一个List,它的每一个元素都是ParameterMapping对象。该对象会描述参数,参数包括属性名称、表达式、JavaType、jdbcType、typeHandler等重要信息。
  • sql属性就是书写在映射器里面的一条被SqlSource解析后的SQL。

注:在开发mybatis插件中,一般不需要修改MappedStatement和SqlSource,只需要拿到反映最终的参数和SQL的BoundSql类的对象,从而对运行过程做出必要的修改,来满足特殊的需求。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值