Spring整合Mybatis

  Spring整合Mybatis成功,也就是service能成功调用dao执行web层要求的操作。而service已经放在IOC容器中,如果service能在IOC容器中拿到dao的对象,那么就能调用。

学习Mybatis时,使用Mybatis框架后,我们要对数据库进行操作时,不再创建持久层接口的是实现类,而是使用代理对象的方式,如下:

//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建 SqlSessionFactory 的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用构建者创建工厂对象 SqlSessionFactory
SqlSessionFactory factory = builder.build(in);
//4.使用 SqlSessionFactory 生产 SqlSession 对象
SqlSession session = factory.openSession();
//5.使用 SqlSession 创建 dao 接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//6.使用代理对象执行查询所有方法
List<User> users = userDao.findAll();
for(User user : users) {
System.out.println(user);
}
//7.释放资源
session.close();
in.close();

那么,我们只要把代理对象放入IOC容器,service拿到代理对象,就能对数据库执行操作。

所以,我们在Spring的配置文件applicationContext.xml中,配置以下内容:

  • mybatis的环境(MySQL/Oracle/…),也就是连接池
  • 配置SqlSessionFactory 工厂(用来产生代理对象)
  • 配置接口所在包
<!--配置连接池-->
    <!--加载配置文件db.properties-->
    <context:property-placeholder location="db.properties"/>
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

<!--配置SqlSessionFactory工厂-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
<!--配置接口所在包 扫描dao接口 -->
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.ziwei.dao"/>
    </bean>

最后 配置Spring的声明式事务管理
也就是把事务的管理交给业务层,保证事务的原子性
举例如下:
如有转账业务,付钱账户转出后(也就是金额减少后),出现了一个错误,如果不是一个事务,那么他的钱会减少,且收款账户的金额不会增长,这就出现了错误。把事务的管理交给业务层,这样一次的任务就是一个事务,如果在dao层操作的途中出现误差,那么整个事务就都不会执行。

<!-- 配置Spring的声明式事务管理 -->
    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>
Spring整合MybatisSpring整合Mybatis Ziwei Xu 发布了61 篇原创文章 · 获赞 5 · 访问量 3298 私信 关注
上一篇:MyBatis——第一个Mybatis程序


下一篇:MyBatis(五)MyBatis整合Spring原理分析