开始mybaits源码学习 1
??? 从org.apache.ibatis.binding.MapperProxy开始。
??? MapperProxy是一个代理类实现java标准代理接口,私有构造,另提供一个获得动态代理的静态方法。
?
??? 1. newMapperProxy
?在Object execute(Object[] args)方法中根据type调用SqlSession不同的方法
?
public Object execute(Object[] args) { Object result = null; if (SqlCommandType.INSERT == type) { Object param = getParam(args); result = sqlSession.insert(commandName, param); }//...... } else if (SqlCommandType.SELECT == type) { if (returnsVoid && resultHandlerIndex != null) { executeWithResultHandler(args);//取交集 ??? } else if (returnsList) { result = executeForList(args);//委托sqlSession.selectList } else if (returnsMap) { result = executeForMap(args);//委托sqlSession.selectMap } else { //可能返回一个自定义的类 Object param = getParam(args); result = sqlSession.selectOne(commandName, param); } return result; }目前为止,自定义的Mapper接口的使命就完成了,所有的查询都交给SqlSession处理。那么SqlSession怎么生成的,怎么处理即成为了重点。
?
a.连接的生成、结果集的封转。
b.配置文件的解析,动态sql生成、缓存、事务
?