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); } }

  测试结果如下:

  注意前三步的逻辑: