赞
踩
注意:
学习源码一定一定不要太关注代码的编写,而是注意代码实现思想:
通过设问方式来体现代码中的思想;方法:5W+1H
源代码:https://gitee.com/xbhog/mybatis-xbhog;https://github.com/xbhog/mybatis-xbhog;交个朋友,有价值欢迎star。
上一局实现Mapper接口和映射器通过代理类的方式进行链接。
上一局测试类:【简写MyBatis】01-简单映射器;虽然基本功能实现了,但是还不智能,可以发现该测试类中的映射器代理工厂只能实现单一的接口代理,SqlSession也需要规范化处理;将映射器代理和方法的调用类似服务进行包装。
@Test
public void test_MapperProxyFactory() {
MapperProxyFactory<IUserDao> factory = new MapperProxyFactory<>(IUserDao.class);
Map<String, String> sqlSession = new HashMap<>();
sqlSession .put("com.xbhog.IUserDao.getUserName","模拟执行 Mapper.xml 中 SQL 语句的操作:查询用户姓名");
IUserDao userDao = factory.newInstance(sqlSession);
String res = userDao.queryUserName("10001");
logger.info("测试结果:{}", res);
}
项目结构:
└─src ├─main │ └─java │ └─com │ └─xbhog │ ├─binding │ │ ├─MapperProxy.java │ │ ├─MapperProxyFactory.java │ │ └─MapperRegistry.java │ └─session │ ├─DefaultSqlSession.java │ ├─DefaultSqlSessionFactory.java │ ├─SqlSession.java │ └─SqlSessionFactory.java └─test └─java └─com └─xbhog ├─AppTest.java └─IUserDao.java
项目类图
可以通过自定义MapperRegistry这个类实现该功能,当然你也可以叫其他的名字(zhangsan、lisi
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。