手写实现乞丐版mybatis

参考我们阅读源码画的uml图,来实现我们自己的mybatis(造个轮子)

手写实现乞丐版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(造轮子),那么就会避免之前只是知道这么用,但是不知道为什么这么用的问题。

源代码:

https://gitee.com/constfafa/mybatis_demo.git