0%

ResultSetHandler结果集处理

StatementHandler接口在执行完指定的select语句之后,会将查询得到的结果集交给ResultSetHandler完成映射处理。ResultSetHandler除了负责映射select语句查询得到的结果集,还会处理存储过程执行后的输出参数。

阅读全文 »

类型转换

JDBC的数据类型和Java的数据类型不完全对应,所以在PreparedStatement为SQL语句绑定参数时,需要从Java类型转成JDBC类型,从结果集获取到数据要把JDBC的类型转换成Java的类型,mybatis使用的是TypeHandler类型处理器来完成这两种转换的。

阅读全文 »

Sql绑定

在mybatis中定义一个接口,然后在mapper.xml文件中编写一个sql语句,在执行该接口中方法的时候就会执行该sql语句,这是怎么做到的呢?

阅读全文 »

ParameterHandler参数处理

ParameterHandler是参数处理器,mybatis通过ParameterHandler对预编译sql中参数进行设置,如果有配置typeHandler,自然会对注册的typeHandler对参数进行处理

1
2
3
4
5
6
public interface ParameterHandler {
// 获取参数对象
Object getParameterObject();
// 负责调用PreparedStatement.set*方法为SQL绑定实参
void setParameters(PreparedStatement var1) throws SQLException;
}
阅读全文 »

StatementHandler数据库交互

StatementHandler接口是mybatis的核心接口之一,StatementHandler接口中功能很多,进行预编译并且调用ParameterHandler的setParameters()方法设置参数,创建Statement对象,通过ParameterHandler为SQL语句绑定实参,执行select、insert、update、delete等多种类型的SQL语句,批量执行SQL语句,通过ResultSetHandler将结果集映射成结果对象。

StatementHandler流程

  • 创建: 由Configuration方法中newStatementHandler()方法生成的,生成的是RoutingStatementHandler
  • 选择: RoutingStatementHandler的通过适配器模式找到对应(根据上下文)的StatementHandler执行的,并且有SimpleStatementHandler、PrepareStatementHandler、CallableStatementHandler
  • Executor会调用StatementHandler的prepare方法创建Statement,调用parameterize方法通过ParameterHandler设置参数,完成预编译(只有Statement为PreparedStatement时才会进行预编译)
  • 最后调用ResultSetHandler封装结果集
阅读全文 »