Spring和mybaits的整合
1.导maven依赖
除了 mysql, spring-mvc mybaits 还需要导入下面的mybaits-spring 和spring -jdbc依赖
注意spring-mvc的依赖跟spring-jdbc的版本要一致,不然报错!
mybaits-spring的版本要求官方文档有说明
<dependency> <groupId>org.mybatisgroupId> <artifactId>mybatis-springartifactId> <version>2.0.2version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-jdbcartifactId> <version>5.2.0.RELEASEversion> dependency>
2.复习mybaits的相关
3.Spring和mybaits整合涉及到主要几点
1.spring配置(applicationcontext.xml)来管理数据源,不用mybaits的mybaits-config.xml中的 environment来管理数据源了,这个数据源的配置要在sqlSessionFactory里使用。
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybaits?useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> bean>
2.sqlSessionFactory不再使用工具类来创建了。用spring配置将它装在spring容器中。并且在这里还可以关联之前的mybaits的核心配置文件
他的注入需要数据源
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybaits-config.xml"/> <property name="mapperLocations" value="classpath:com/chen/dao/*.xml"/> bean>
3.数据映射器类SqlSessionTemplate(模板)。这个bean会生成我们用的sqlsession。
他的注意需要sqlSessionFactory,没有set方法,只能用构造器注入的方式注入
<bean id="sqlsession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/> bean>
4.给原来的mybaits接口编写实现类,使用SqlSessionTemplate
实现类来通过sqlsession获得mapper,mapper实现数据库操作
注意使用注解的时候自动Autowired,不然汇报空指针异常
import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; @Component public class UserMapperImpl implements UserMapper{ private SqlSessionTemplate sqlSession; @Autowired public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } public List getUser() { UserMapper mapper = sqlSession.getMapper(UserMapper.class); List user = mapper.getUser(); return user; } }
5.将实现类注册到spring容器中并测试使用
注意ref和value
<context:annotation-config/> <context:component-scan base-package="com.chen.dao"/> <import resource="mybaits-spring.xml"/>
<bean id="userMapperImpl" class="com.chen.dao.UserMapperImpl"> <property name="sqlSession" ref="sqlsession"/> bean>
@Test public void mybaitspringTest(){
//测试代码!!!! ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapper userMapperImpl = context.getBean("userMapperImpl", UserMapper.class); //代理接口.class List user = userMapperImpl.getUser(); for (Object o : user) { System.out.println(o); } }
测试结果如下:
注意前三步的逻辑: