Author:赵志乾
Date:2024-07-15
Declaration:All Right Reserved!!!
1. 简介
StatementHandler封装了对JDBC各类Statement的操作,如设置fetchSize属性、设置查询超时时间、与数据库进行交互等;
public interface StatementHandler {// 用于创建JDBC Statement对象,并完成Statement对象的属性设置Statement prepare(Connection connection, Integer transactionTimeout) throws SQLException;// 用于使用MyBatis中的ParameterHandler组件为PreparedStatement和CallableStatement参数占位符设置值void parameterize(Statement statement) throws SQLException;// 将SQL命令添加到批处理列表中void batch(Statement statement) throws SQLException;// 调用Statement对象的execute方法执行更新语句,如:INSERT、UPDATE、DELETE语句int update(Statement statement) throws SQLException;// 执行查询语句,并使用ResultSetHandler处理查询结果集<E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException;// 带游标的查询,返回Cursor对象,能够通过Iterator动态地从数据库中加载数据,适用于查询数据量较大的情况,避免将所有数据加载到内存中<E> Cursor<E> queryCursor(Statement statement) throws SQLException;// 获取Mapper配置的SQL信息,BoundSql封装了动态SQL解析后的SQL文本和参数映射信息BoundSql getBoundSql();// 获取ParameterHandler实例ParameterHandler getParameterHandler();
}
2. 类体系
BaseStatementHandler是一个抽象类,封装了通用的处理逻辑及方法执行流程,具体方法由子类实现,使用了模板模式;
- SimpleStatementHandler:封装了对JDBC Statement对象的操作;
- PreparedStatementHandler:封装了对JDBC PreparedStatement对象的操作;
- CallableStatementHandler:封装了对JDBC CallableStatement对象的操作;
- RoutingStatementHandler:依据 Mapper配置中的statementType属性(取值为STATEMENT、PREPARED、CALLABLE)创建对应的StatementHandler实现;