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()的执行过程

全部评论

相关推荐

暮雨轻歌:看起来hr不能接受我菜查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务