加载XML配置文件
* 解析全局配置文件(参考mybatis的配置方式)
** 数据源的配置信息(driver、url、username、password)-------最终解析从dataSource对象,并封装到Configuration对象中
** 映射文件的信息
* 解析映射文件 SqlSource和SqlNode,都是为了去存储数据,并且对存储的对我提供一些操作。
- 解析select标签(statement标签)
- 解析select标签中的SQL脚本信息(script)==》【封装成SqlSource对象】==》【SqlNode】
DynamicSqlSource和RowSqlSource的区别
- DynamicSqlSource的SqlNode集合信息【解析】工作是发生在【每一次调用getBoundSql方法的时候】
- RawSqlSource(#{}也就是替换为?占位符)的SqlNode集合信息【解析】工作是发生在【第一次构造RawSqlSource的时候】,因为被RawSqlSource封装的节点信息,【只需要被解析一次】
JDBC执行代码(如果需要配置文件的信息,则需要从【Configuration】对象中获取)
* 获取连接
** 使用数据源对象去优化连接的创建(DBCP,需要第三方的依赖)
** 需要通过Configuration对象,去获取解析出来的DataSource对象信息
* 获取SQL
** 获取SQL语句:将所有的SqlNode(SqlSource->SqlNode集合)中保存的信息,都拼接到StringBuffer对象中。在拼接的过程中,会将${}解决,SqlNode包含SqlNode,SqlNode中包含SqlNode集合
** 解析SQL语句:将完成的SQL语句中的#{}处理掉,在解析过程中,会形成两部分数据【最终的SQL语句、#{}中的属性名称】,将最终的SQL语句,封装到StaticSqlSource中
** 通过SqlSource获取BoundSql(jdbc可以执行的SQL语句)
** 通过BoundSql,获取里面存储的SQL语句
* 创建Statement
** 通过【MappedStatement】对象获取statementType
* 设置参数
** 通过【MappedStatement】获取入参类型(简单类型、引用类型)
** 如果是应用类型,则需要sql解析过程中,产生的参数信息(ParamneterMapping集合信息),我要根据这个参数信息,去入参对象获取指定类型
** 调用statement.setString(1,"zhangsan")
* 执行Statement
* 处理结果集
** 通过【MappedStatement】获取输出映射类型
** 通过反射给输出映射类型对应的对象,去设置属性值,去设置属性值(通过resultSet中每一列中来)