Spring-day10-Spring-Mybatis

#Spring和MyBatis整合

准备工作:需要引入一个mybatis-spring.jar整合包。

##整合组件

- **SqlSessionFactoryBean** : 加载sqlmap-config.xml配置信息创建一个SqlSessionFactory对象。
- MapperFactoryBean : 根据注入的SqlSessionFactory和Mapper接口创建一个Mapper对象返回
- **MapperScannerConfigurer** : 根据注入SqlSessionFactory和包路径自动扫描,寻找包中所有接口,然后批量生成Mapper对象
- SqlSessionTemplate : 封装了获取SqlSession、使用SqlSession和释放过程

          SqlSessionTemplate.selectList("findAll");
            等价于
          SqlSession session = MyBatisUtil.getSession();
          session.selectList("findAll");
          session.close();

##整合方案

###方案1:使用SqlSessionFactoryBean+MapperScannerConfigurer(使用Mapper映射器)


![](http://i.imgur.com/udMgfOF.png)

1. SqlSessionFactoryBean配置

        <bean id="ssf" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 指定mybatis配置文件 -->
            <property name="configLocation" 
                value="classpath:sqlmap-config.xml">
            </property>
            <!-- 必须注入dataSource -->
            <property name="dataSource" ref="dbcp">
            </property>
        </bean>
    
        <!-- 定义DataSource -->
        <bean id="dbcp" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="username" value="SCOTT"></property>
            <property name="password" value="TIGER"></property>
            <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"></property>
            <property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
        </bean>


2. MapperScannerConfigurer配置

     <!-- 定义MapperScannerConfigurer,创建Mapper接口对象,默认id为接口名首字母小写 -->
         <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
             <!-- 指定Mapper接口所在包路径 -->
             <property name="basePackage" value="com.xdl">
             </property>
             <!-- 指定带有@MyBatisDao标记的才有效 -->
             <property name="annotationClass" value="com.xdl.util.MyBatisDao">
             </property>
             <!-- 指定sqlSessionFactory,可省略,可以自动寻找SqlSessionFactory对象注入 -->
         </bean>


###方案2:使用SqlSessionFactoryBean+SqlSessionTemplate(自定义DAO实现类)

![](http://i.imgur.com/RpDfEnW.png)


1. 自定义Dao接口


        public interface MyDeptDao {
            
            public List<Dept> findAllDepts();
            
        }


2. 自定义Dao实现类

    @Repository
    public class MyBatisDeptDao implements MyDeptDao{
        @Resource
        private SqlSessionTemplate template;
        
        @Override
        public List<Dept> findAllDepts() {
            List<Dept> list = template.selectList("findAll");
            return list;
        }
    
    }

3. 配置DAO,将Dao扫描到Spring容器

    先在Spring配置文件追加下面配置

        <context:component-scan base-package="com.xdl.dao"/>
    
    然后在DAO实现类前追加@Repository扫描标记

4. 配置Template,将template对象注入到Dao对象

    在Spring配置文件追加下面配置

         <bean class="org.mybatis.spring.SqlSessionTemplate">
             <!-- 注入SqlSessionFactory对象 -->
             <constructor-arg index="0" ref="ssf">
             </constructor-arg>
         </bean>

    然后在DAO实现类的SqlSessionTemplate变量前追加@Resource注入标记

欢迎转载:海阔天空 » Spring-day10-Spring-Mybatis

评论 沙了个发

换个身份

取消评论