其实sqlSession.getMapper(xxx.class)——>就很像之前源码中代理工厂.getMapper()生成一个代理对象然后执行目标方法(被代理对象执行),其实本质都一样,我们的sqlSession相当于一个connection,执行目标方法通过jdk动态代理执行——>1.得到我们注解上的sql,通过反射得到参数名@Param标记的,和传入的args值放到map中——>2.然后利用GenericTokenParser,将sql中占位符中的字段名利用TokenHandler中的handleToken方法替换为?,并且将字段名封装到tokenHandler中的一个集合中——>3.预编译sql得到Statement——>4.因为我们直接在tokenHandler中封装了sql占位符中的字段名,通过字段名在map获取args值,然后通过类型转换器,根据参数类型得到一个类型转换器调用封装的PreparedStatement的set方法,将属性值替换到sql语句中——>5.然后进行getResultSet得到结果集——>6.将结果集封装到实体类中
(50条消息) MyBatis 的一级缓存与二级缓存_一起努力啊啊啊啊的博客-CSDN博客_mybatis一级缓存二级缓存