手写实现乞丐版mybatis
参考我们阅读源码画的uml图,来实现我们自己的mybatis(造个轮子)
组织结构
1. Configuration类我们直接用EmployeeMapperXml来代替
2. MySqlSession
3. Interface MyExecutor
4. Class MySimpleExecutor
5. Class MyMapperProxy
6. Interface EmployeeMapper
7. 启动类BootStrap
BootStrap
与我们mybatis的业务代码一致
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执行query方法
MyMapperProxy
getMapper实际上返回的是一个动态代理对象,与mybatis一样,EmployeeMapper interface并没有实现类,而是在其动态代理方法中执行其实现方法,在这里就是从configuration中取出sql及参数并执行
执行sql就要使用executor了
MySimpleExecutor MyExecutor
这里使用了硬编码的方式,进行数据结果的解析。而mybatis中用resultMap来执行结果映射模板。
总结:
通过自己写一个乞丐版的mybatis(造轮子),那么就会避免之前只是知道这么用,但是不知道为什么这么用的问题。
源代码: