mybatis框架分析编写dao实现类的执行过程
总结:
session.selectList()的执行过程
跟进代码,查看selectList源码:
跟进executors.query,发现executor是个接口
打断点,找到具体实现类
是cachingExecutor,跟进
再跟进query方法
同样是打断点,找到具体的实现类SimpleExecutor
进入SimpleExecutor,发现没有query方法,原来extends了BaseExecutor
进入BaseExecutor查看,找到query方法
找到返回值对应的方法,queryFromDatabase,继续跟进
查看queryFromDatabase中的doquery方法
进入doquery()方法,发现由抽象方法实现
故该方法doQuery()有SimpleExecutor实现,
找到doquery()
进入handler.<e>query(stmt.resultHandler)
进入delegate.<e> query()
执行完成,封装解析结果集handleResultSet
《!-----------------------------------------------------------------》
找到实现类DefaultSqlSession
找到insert方法
注意insert实际调用的是update()方法,接下来转到update方法</e></e>
《!-----------------------------------------------------------------》
update()方法
到DefaultSqlSession中的update()
到CachingExceutor方法
发现调用delegate.update()
在BaseExecutor中找到实现的update()
《!-----------------------------------------------------------------》
delete方法本质上执行的是update,转接update(String statement,Object parameter)
跟进到do_update()抽象方法
找到SimpleExecutor实现类
跟进SimpleExecutor类,找到doupdate()方法
doupdate()中handler调用update方法
跟进为抽象方法
然后会执行update()
跟进到PreparedStatementHandler类中preparedStatement中传统jdbc操作
《!-----------------------------------------------------------------》
到DefaultSqlsession找到selectOne(),本质上调用的还是selectList()
接下来再次上述跟进session.selectList()的执行过程