手写实现乞丐版mybatis
參考我們閱讀源碼畫的uml圖,來實現(xiàn)我們自己的mybatis(造個輪子)
閱讀源碼參考:mybatis查詢過程的源碼分析
組織結(jié)構(gòu)
1. Configuration類我們直接用EmployeeMapperXml來代替
2. MySqlSession
3. Interface MyExecutor
4. Class MySimpleExecutor
5. Class MyMapperProxy
6. Interface EmployeeMapper
7. 啟動類BootStrap
BootStrap
與我們mybatis的業(yè)務(wù)代碼一致
MySqlSession sqlSession = new MySqlSession();EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Employee employee = mapper.getEmployeeById(1);System.out.println(employee);其是如何做的呢?
?
MysqlSession
在MySqlSession中,持有MyExecutor
提供了getMapper方法,返回代理對象
提供了selectOne方法,通過executor執(zhí)行query方法
?
MyMapperProxy
getMapper實際上返回的是一個動態(tài)代理對象,與mybatis一樣,EmployeeMapper interface并沒有實現(xiàn)類,而是在其動態(tài)代理方法中執(zhí)行其實現(xiàn)方法,在這里就是從configuration中取出sql及參數(shù)并執(zhí)行
?
執(zhí)行sql就要使用executor了
?
MySimpleExecutor? MyExecutor
這里使用了硬編碼的方式,進(jìn)行數(shù)據(jù)結(jié)果的解析。而mybatis中用resultMap來執(zhí)行結(jié)果映射模板。
?
總結(jié):
通過自己寫一個乞丐版的mybatis(造輪子),那么就會避免之前只是知道這么用,但是不知道為什么這么用的問題。
源代碼:
https://gitee.com/constfafa/mybatis_demo.git
總結(jié)
以上是生活随笔為你收集整理的手写实现乞丐版mybatis的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Notification基本通知的两种写
- 下一篇: 僵尸网络“Mykings”