1. 解析 Mapper 文件中的 SQL 语句和参数信息,生成 MappedStatement 对象。
2. 利用 MappedStatement 对象中的 SQL 语句和参数信息,结合参数对象,生成最终的 SQL 语句。
具体过程如下:
1. 解析 Mapper 文件中的 SQL 语句和参数信息,生成 MappedStatement 对象
在 Mybatis 中,每个 SQL 语句都对应一个 MappedStatement 对象,这个对象中包含了该 SQL 语句的各种信息,比如 SQL 语句、参数类型、结果类型等等。在解析 Mapper 文件时,Mybatis 会读取 XML 文件中定义的 SQL 语句,将它们解析成 MappedStatement 对象,并将这些对象存放到 Configuration 对象中的 mappedStatements 集合中。
2. 利用 MappedStatement 对象中的 SQL 语句和参数信息,结合参数对象,生成最终的 SQL 语句
在执行 SQL 语句之前,Mybatis 会将 Mapper 文件中定义的 SQL 语句和参数信息结合起来,生成最终的 SQL 语句。这个过程是通过 SQLSource 对象完成的,它是 Mybatis 中用于生成 SQL 语句的接口。每个 MappedStatement 对象都对应一个 SQLSource 对象,在执行 SQL 语句之前,Mybatis 会根据当前执行的 SQL 语句获取对应的 MappedStatement 对象,并利用 MappedStatement 对象中的 SQLSource 对象生成最终的 SQL 语句。
SQLSource 接口中最核心的方法是 getBoundSql(),该方法返回一个 BoundSql 对象,这个对象中包含了最终的 SQL 语句以及该 SQL 语句对应的参数信息。在生成 BoundSql 对象的过程中,Mybatis 会利用 MappedStatement 对象中的 SQL 语句和参数信息,结合传入的参数对象,生成最终的 SQL 语句。
因此,当我们调用 Mybatis 中的 SQL 执行方法时,Mybatis 内部会根据 Mapper 文件中的 SQL 语句和参数信息,结合传入的参数对象,生成最终的 SQL 语句,并将这个 SQL 语句发送到数据库中执行。