Spring其实就是一个容器,管理所有注册到其中的bean,并通过IOC机制注入依赖。MyBatis是一个持久层框架,这个框架的作用就是规范Java与数据库的交互。
在MyBatis框架中,与数据库的交互通过如下步骤。
- 读取配置文件
mybatis-config.xml
。 - 根据配置文件通过
SqlSessionFactoryBuilder
对象创建sqlSessionFactory
对象。 - 调用
sqlSessionFactory
的openSession()
获得sqlSession
。 - 调用
sqlSession
的getMapper()
方法并传入接口类型获取这个接口类型的代理对象。 - 通过代理对象去执行该接口的配置文件中的SQL语句。
总结下来,MyBatis框架所必须的文件就是配置文件mybatis-config.xml
、与数据库表结构对应的实体bean、接口interface
及对应的xml
配置文件。
在Spring框架中,基本思想是通过Spring容器直接获得装配好的实体bean。在applicationContext.xml
文件中配置相应的实体bean并将依赖注入,然后根据配置文件创建context
上下文,由上下文通过传入id
和class
直接获取实体bean。
Spring和MyBatis整合后,显然不能再通过MyBatis框架中的方式获得sqlSession
,那么一个解决方案就是在*Mapper.java
中设置一个属性为sqlSession
,并在*Mapper.java
中通过sqlSession.getMapper()
获得代理对象,代理对象执行*Mapper.xml
配置的SQL。其实就是把获得SqlSession
和通过getMapper()
方法获得代理对象的步骤进行封装,封装到不同业务的代码中。这样从Spring中拿到对象后,执行CRUD时,实际上是由UserMapper
的代理对象执行的。
可以把mybatis-config.xml
中的配置移动到Spring的配置文件中,并在Spring中配置Factory和SqlSession。
<!--Spring管理DataSource,即Spring管理与数据库的配置-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value=