Mybatis源代码中如何详细解析其功能流程?
- 内容介绍
- 文章标签
- 相关推荐
本文共计5420个文字,预计阅读时间需要22分钟。
Mybatis在初始化时,会读取XML中的SQL语句,解析后生成SqlSource对象。SqlSource对象分为两种:DynamicSqlSource和RawSqlSource。
DynamicSqlSource:动态SQL,获取SQL(通过getBoundSQL方法)时生成参数化SQL。
RawSqlSource:原始SQL。
SQL解析
Mybatis在初始化的时候,会读取xml中的SQL,解析后会生成SqlSource对象,SqlSource对象分为两种。
DynamicSqlSource,动态SQL,获取SQL(getBoundSQL方法中)的时候生成参数化SQL。RawSqlSource,原始SQL,创建对象时直接生成参数化SQL。
因为RawSqlSource不会重复去生成参数化SQL,调用的时候直接传入参数并执行,而DynamicSqlSource则是每次执行的时候参数化SQL,所以RawSqlSource是DynamicSqlSource的性能要好的。
解析的时候会先解析include标签和selectkey标签,然后判断是否是动态SQL,判断取决于以下两个条件:
- SQL中有动态拼接字符串,简单来说就是是否使用了
${}表达式。注意这种方式存在SQL注入,谨慎使用。
本文共计5420个文字,预计阅读时间需要22分钟。
Mybatis在初始化时,会读取XML中的SQL语句,解析后生成SqlSource对象。SqlSource对象分为两种:DynamicSqlSource和RawSqlSource。
DynamicSqlSource:动态SQL,获取SQL(通过getBoundSQL方法)时生成参数化SQL。
RawSqlSource:原始SQL。
SQL解析
Mybatis在初始化的时候,会读取xml中的SQL,解析后会生成SqlSource对象,SqlSource对象分为两种。
DynamicSqlSource,动态SQL,获取SQL(getBoundSQL方法中)的时候生成参数化SQL。RawSqlSource,原始SQL,创建对象时直接生成参数化SQL。
因为RawSqlSource不会重复去生成参数化SQL,调用的时候直接传入参数并执行,而DynamicSqlSource则是每次执行的时候参数化SQL,所以RawSqlSource是DynamicSqlSource的性能要好的。
解析的时候会先解析include标签和selectkey标签,然后判断是否是动态SQL,判断取决于以下两个条件:
- SQL中有动态拼接字符串,简单来说就是是否使用了
${}表达式。注意这种方式存在SQL注入,谨慎使用。

