经过了上述步骤,SqlSessionFactory就可以被交给Spring管理了,解决了第一个问题,可以从Spring上下文中获取到SqlSessionFactory这个Bean了。
ClassPathXmlApplication applicationContext = new ClassPathXmlApplicationContext("spring.xml"); SqlSessionFactory sqlSessionFactory = applicationContext.getBean(SqlSessionFactory.class); SqlSession sqlSession = sqlSessionFactory.openSession(); // 省略后续MyBatis代码 -.- ...... Mapper的代理对象-MapperFactoryBean接下来讨论Spring如何实现通过@Autowired将Mapper注入进来后就能直接使用的问题。
首先思考一下,如何将一个类交给Spring管理?@Component系列注解?而MyBatis是一个个Interface而不是Class,在上面加注解是没用的,我们需要的是将MyBatis对Mapper生成的代理对象交给Spring管理。那该怎么做呢?Spring的做法是将Mapper一对一地包装成了MapperFactoryBean,而MapperFactoryBean维护了Mapper的类型,通过该类型获取Mapper代理实例。