美文网首页程序猿之路
Mybatis源码解析 StatementHandler

Mybatis源码解析 StatementHandler

作者: 三斤牛肉 | 来源:发表于2017-06-02 20:33 被阅读69次

    StatementHandler用于执行Statement相关操作

    相关处理接口:

    //实例化Statement
    Statement prepare(Connection connection)
          throws SQLException;
    
    //设置sql参数 
    void parameterize(Statement statement)
          throws SQLException;
    
    //增加批量语句但不执行,批量会在flush的时候统一执行
    void batch(Statement statement)
          throws SQLException;
    
    //执行更新语句(update/insert/delete)
    int update(Statement statement)
          throws SQLException;
    
    //执行query语句
    <E> List<E> query(Statement statement, ResultHandler resultHandler)
          throws SQLException;
    
    //
    BoundSql getBoundSql();
    
    ParameterHandler getParameterHandler();
    

    Mybatis默认实现:

    image.png

    RoutingStatementHandler

    委派模式,根据StatementType委派给图中其他3种handler中的一种

    BaseStatementHandler

    3种handle的基类,实现公共方法,并暴露抽象实现instantiateStatement给子类

    SimpleStatementHandler

    对应了Statement,用于执行简单的Sql语句

    CallableStatementHandler

    对应CallableStatement
    用于执行存储过程

    PreparedStatementHandler

    对应PreparedStatement
    执行带多项参数的SQL
    eg:

    分别对应了Statement,CallableStatement,PreparedStatement
    Statement:执行简单sql语句
    PreparedStatement:执行带参数的Sql
    eg:

    PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
                                          SET SALARY = ? WHERE ID = ?");
    pstmt.setBigDecimal(1, 153833.00)
    pstmt.setInt(2, 110592)
    pstmt.execute()
    

    Mybatis默认的执行方式是prepare

    mappedStatement.statementType = StatementType.PREPARED;
    

    相关文章

      网友评论

        本文标题:Mybatis源码解析 StatementHandler

        本文链接:https://www.haomeiwen.com/subject/ucoufxtx.html