zoukankan      html  css  js  c++  java
  • 七、MyBatis与spring整合

      实现mybatis与spring进行整合,通过spring管理SqlSessionFactory、mapper接口

    一、mybatis与spring整合jar

      mybatis官方提供与mybatis与spring整合jar包:

            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.3</version>
            </dependency>
    
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.5.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>5.2.2.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.2.2.RELEASE</version>
            </dependency>

    二、Spring配置文件

      在classpath下创建applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans.xsd 
           http://www.springframework.org/schema/context 
           https://www.springframework.org/schema/context/spring-context.xsd 
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    
    
        <!-- 引入数据库的配置文件 -->
        <context:property-placeholder location="classpath:properties/jdbc.properties"/>
    
        <!--数据源-->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="user" value="${db.username}"/>
            <property name="password" value="${db.password}"/>
            <property name="jdbcUrl" value="${db.jdbcUrl}"/>
            <property name="driverClass" value="${db.driverClass}"/>
        </bean>
    
        <!-- spring事务管理 -->
        <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
        <!-- 开启基于注解的事务 -->
        <tx:annotation-driven transaction-manager="dataSourceTransactionManager" proxy-target-class="true"/>
    
    
        <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
        <!--创建出SqlSessionFactory对象  -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 数据库连接池 -->
            <property name="dataSource" ref="dataSource" />
            <!-- configLocation指定全局配置文件的位置 -->
            <property name="configLocation" value="classpath:mybatis-config/mybatis-config_01.xml" />
            <!--mapperLocations: 指定mapper文件的位置-->
            <property name="mapperLocations" value="classpath:sqlmap/*.xml"></property>
        </bean>
    
    
    </beans>

    三、测试

    public class Test_04 {
    
        public static final String RESOURCE = "applicationContext.xml";
        private SqlSessionFactory sqlSessionFactory;
    
        @Before
        public void createFactory() {
            sqlSessionFactory = (SqlSessionFactory)  new ClassPathXmlApplicationContext(RESOURCE).getBean("sqlSessionFactory");
        }
    
    
        @Test
        public void test_Method01() {
            SqlSession sqlSession1 = sqlSessionFactory.openSession();
            //获限mapper接口实例
            UserMapperDao dao1 = sqlSession1.getMapper(UserMapperDao.class);
            //使用session1执行第一次查询
            User user1 = dao1.findUserById("2");
            System.out.println("user = " + user1);
            sqlSession1.commit();
            //关闭session
            sqlSession1.close();
    
            //使用session2执行第二次查询,由于开启了二级缓存这里从缓存中获取数据不再向数据库发出sql
            SqlSession sqlSession2 = sqlSessionFactory.openSession();
            //获限mapper接口实例
            UserMapperDao dao2 = sqlSession2.getMapper(UserMapperDao.class);
            //第二次查询,由于是同一个session则不再向数据发出语句直接从缓存取出
            User user2 = dao2.findUserById("2");
            System.out.println("user = " + user2);
            //关闭session
            sqlSession1.close();
        }
    } 
  • 相关阅读:
    窗体的扩展样式GWL_EXSTYLE用于SetWindowLong
    内存映射对于大文件的使用
    Delphi实现全局鼠标钩子
    全局键盘钩子(WH_KEYBOARD)
    实现拦截API的钩子(Hook)
    JBoss + EJB3 + MySql : 开发第一个EJB
    取PE文件的引入表和导出表
    Webbrowser中模拟连接点击(非鼠标模拟)
    打造无DLL版穿透防火墙Downloader
    Delphi 常用属性+方法+事件+代码+函数
  • 原文地址:https://www.cnblogs.com/jdy1022/p/14177371.html
Copyright © 2011-2022 走看看