关于spring/springboot如何注入mybatis的

1.注入sqlSessionFactory
2.注入.MapperFactoryBean(它的属性是:sqlSessionFactory和Dao)
3.MapperFactoryBean 是一个 FactoryBean工厂类,当 ioc调用getBean的时候,调用的是它的 getObject方法,并且只会调用一次,因为 Factory接口里面 有一个 isSingle方法 默认是true返回单例的,getObject执行的时候,也是动态代理执行的,只会返回 一个单例对象

注意:依赖注入mapper的时候,给mapper赋值的时候(==调用context.getBean(mapper)),不是直接获取的mapperFactoryBean,而是底层调用了 mapperFactoryBean的getObject方法创建 mapper的方法(有sqlSessionFactory就可以创建sqlSession,有Dao,就可以调用sqlSession.getMapper(Dao.class)获取mapper)
3.所以,我们获取的mapper是单例的
4.但是当我们执行mapper的方法的时候,底层调用mapper的proxy代理类去执行,sqlSession. crud (mapper的方法名,param),这里的sqlSession是新new出来的,所以虽然mapper是单例的,但是sqlSession是多个的,所以在非事务,每次都是不同的sqlSession在执行

你可能感兴趣的:(spring,boot,spring,java)