Mybatis是目前非常流行的ORM(Object Relational Mapping)框架,本文主要簡單梳理一下Mybatis的工作流程。
1.加載配置文件
Mybatis的配置文件一共有兩類:
- 一類是用于指定數(shù)據(jù)源,事務(wù)屬性以及其他一些參數(shù)配置信息的全局配置文件
- 另一類是用于指定數(shù)據(jù)庫表和程序之間的映射文件
加載到內(nèi)存中會生成一個(gè)對應(yīng)的MappedStatement對象,然后會以key="selectId" ,value為MappedStatement對象的形式維護(hù)到Configuration的一個(gè)Map中。當(dāng)以后需要使用的時(shí)候,只需要通過Id值來獲取就可以了。
2.產(chǎn)生sqlSession
根據(jù)配置文件創(chuàng)建SQLSessionFactory,再由工廠產(chǎn)生sqlSession,SqlSession根據(jù)Statement ID, 在mybatis配置對象Configuration中獲取到對應(yīng)的MappedStatement對象,然后調(diào)用mybatis執(zhí)行器來執(zhí)行具體的操作。使用Mapper方式操作sql,利用的是動(dòng)態(tài)代理,不用實(shí)現(xiàn)mapper接口,通過接口中的方法名來查找到對應(yīng)的方法名
3.MyBatis執(zhí)行器Executor根據(jù)SqlSession傳遞的參數(shù)執(zhí)行query()方法
Executor.query()方法幾經(jīng)轉(zhuǎn)折,最后會創(chuàng)建一個(gè)StatementHandler對象,然后將必要的參數(shù)傳遞給StatementHandler,使用StatementHandler來完成對數(shù)據(jù)庫的查詢,最終返回List結(jié)果集。