MyBatis源码浅析(一)开篇
源码学习的好处不用多说,Mybatis源码量少、逻辑简单,将写个系列文章来学习。发现它也是个接口,必然有默认实现类DefaultSqlSessionFactory。该类依然不用自己创建,使用SqlSessionFactoryBuilder里的工厂方法。Executor位于org.apache.ibatis.executor包中,是个接口,实现类是BaseExecutor和CachingExecutor。其中BaseExecutor是抽象的,有三个子类SimpleExecutor、ReuseExecutor和BatchExecutor,见名知意。3)int update,委托给抽象的abstract int doUpdate。基类处理公共部分,具体留给子类实现。2)Cursor doQueryCursor,委托给handler.queryCursor。可见,最终由handler来处理。BaseStatementHandler是抽象的,有三个子类SimpleStatementHandler、PreparedStatementHandler和CallableStatementHandler。3)int update,委托给statement.execute。最终由statement执行sql。这就回到了java.sql包了。Mybatis主要完成对sql参数的封装处理、结果集的获取并生成对象,而把sql语句的构建过程留给用户。Mybatis的作者故意这样设计的。虽然框架从整体来看是半自动的,但灵活性却得到了极大增加。
用户评论