Spring与Mybatis的整合

Spring与Mybatis的整合

文章目录

  • Spring与Mybatis的整合
    • 一、 回顾MyBatis常规操作流程
    • 二、 Spring整合MyBatis


一、 回顾MyBatis常规操作流程

//mybatis常规操作流程
public void mybatis_basic() throws Exception {
     
    // 获取sqlSession工厂 
    // 注意,此处没有mybatis-config.xml
    InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); 
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    // 获取sqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    // 获取接口的实现类对象,然后执行方法完成功能
    AccountDao mapper = sqlSession.getMapper(AccountDao.class);
    mapper.update(1, 1300);
}

观察之前操作mybatis代码可以发现,mybatis操作数据库过程中,最关键的点是获取sqlSessionFactory对象,而想要获取到该对象,必须将mybatis-config.xml配置文件整合进来,所以我们使用spring整合mybatis的关键点就是: 读取mybatis-config.xml配置文件,然后就可以得到一个工厂对象。有了工厂对象后就可以获取session,再进一步获取mapper,完成功能。

其中可以使用mybatis-config.xml文件,也可以不使用,spring可以直接读取mybatis-config.xml文件,也可以直接在spring配置好mybatis内容,从而省去mybatis-config.xml

二、 Spring整合MyBatis

常规的mybatis开发中,一般需要四种文件:

  • mybatis-config.xml整体配置文件
  • XxxMapper.xml映射文件
  • XxxDao.java映射接口
  • 测试文件

现在我们要借助Spring完成一个完整mybatis功能,相关配置如下:

映射文件:




<mapper namespace="com.au.db.AccountDao">
	
	<update id="update">
		update t_account set balance = #{1} where id = #{0}
	update>
	
mapper>

映射接口:

// 映射接口
public interface AccountDao {
     
	//更新余额
	void update(int accountId, double balance);
}

oracle.properties内容:

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:XE
user=system
password=123456789

Spring配置文件:


<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    
    <context:property-placeholder location="classpath:oracle.properties" />

    
    <bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName">
            <value>${driver}value>
        property>
        <property name="url">
            <value>${url}value>
        property>
        <property name="username">
            <value>${user}value>
        property>
        <property name="password">
            <value>${password}value>
        property>
    bean>

    
    
    <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage" value="com.au.db">property>
        <property name="configurationProperties">
            <props>
                <prop key="cacheEnabled">trueprop>
            props>
        property>
        
        <property name="mapperLocations"
            value="classpath:com/au/db/mybatis/AccountMapper.xml" />
    bean>

    
    
    

    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.au.db" />
    bean>

    
beans>

测试代码:

@Test
public void mybatis_update(){
     
    try {
     
        String path = "com/au/db/mybatis/spring_mybatis.xml";
        ClassPathXmlApplicationContext container = new ClassPathXmlApplicationContext(path);
        
        //注意,获取的是 接口的实现类对象,获取后可以通过该对象调用里面的方法
        AccountDao dao = (AccountDao) container.getBean("accountDao");
        dao.update(1, 1260);
        System.out.println(dao.getClass());
        
        container.destroy();
    }catch(Exception e) {
     
        e.printStackTrace();
    }
}

你可能感兴趣的:(Spring,MyBatis,Java)