mybatis plus动态数据源切换及查询过程浅析
如果事务内仍需要切换数据源,则需要单独定义service并设置切点,设置此切点的事务传播行为为PROPAGATION__REQUIRES_NEW,则执行切面方法时单独创建一个事务,数据源会自动切换。可以看到此处提供多种返回值的查询,有空返回值,多个,map,游标,及啥也不是。空值查询猜测是另有处理器直接处理返回值,此处不做延伸了,有需要再议,回到按照ID查询及进入啥也不是分支,本次查询不是分页查询,直接进入selectOne ,result = sqlSession.selectOne; 这里的sqlSession是SqlSessionTemplate,执行selectOne时首先获取sqlSession2.获取真正的sqlSession并执行selectOne查询,首先使用事务管理器获取缓存的sqlSession的持有者,不存在则创建并缓存注册。得到真正的sqlSession后,执行selectOne,发现还是执行的selectList,然后就是大众写法,size=1返回get,否则为空或者报错结果集太多。