zoukankan      html  css  js  c++  java
  • Hello Mybatis 04 使用spring-mybatis

    顺着上一篇,这里介绍下spring-mybatis的配置。

    我们使用mybatis去操作数据库的时候,每次都要不停地openSession,closeSession好烦躁哇~~这样工作哪里有效率可言!!!看看别人家框架的孩子从来都没有这些破事儿。

     

      mybatis社区的人终于看不下去了,所以他们借助spring开发了犀利的mybatis-spring。我们都知道spring是一个非常著名的java框架,它可以轻松地管理类实例对象和整合多个框架,但是Spring 3.0 的开发在 MyBatis 3.0 官方发布前就结束了,所以mybatis社区只好自己开发了mybatis-spring(实际上spring发布4的时候,spring社区依然没有支持mybatis的包,大概是觉得mybatis-spring已经足够优秀了,所以就没有选择再开发一个包了)。

    准备工作

    我们需要从网站上下载下面两个包

    spring-mybatis下载地址:

    https://github.com/mybatis/spring/releases/download/mybatis-spring-1.2.2/mybatis-spring-1.2.2.zip

    spring下载地址(现在spring更加提倡使用maven来管理项目。找jar包真是太麻烦了~):

    http://repo.spring.io/libs-release-local/org/springframework/spring/4.0.5.RELEASE/spring-framework-4.0.5.RELEASE-dist.zip

     

    将下载过来的jar包放入lib目录

    配置文件

    上配置文件applicationContext.xml(放在src下)

    <?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:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
               http://www.springframework.org/schema/aop 
               http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
               http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-3.0.xsd">
        <!-- 数据库配置文件位置 -->
        <context:property-placeholder location="classpath:jdbc.properties" />
        
        <!-- 配置dbcp数据源 -->    
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${jdbc.driverClassName}" />
            <property name="url" value="${jdbc.url}" />
            <property name="username" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" /> 
            <!-- 队列中的最小等待数 -->
            <property name="minIdle" value="${jdbc.minIdle}"></property>
            <!-- 队列中的最大等待数 -->
            <property name="maxIdle" value="${jdbc.maxIdle}"></property>
            <!-- 最长等待时间,单位毫秒 -->
            <property name="maxWait" value="${jdbc.maxWait}"></property>
            <!-- 最大活跃数  -->
            <property name="maxActive" value="${jdbc.maxActive}"></property>
            <property name="initialSize" value="${jdbc.initialSize}"></property>
        </bean> 
        
        <!-- 配置mybitasSqlSessionFactoryBean,这里会读取Mybatis的配置文件Configuration.xml和数据库连接池 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="configLocation" value="classpath:Configuration.xml"></property>
        </bean>
        
        <!-- 配置SqlSessionTemplate -->
        <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
            <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
        </bean>
        
        <!-- 事务配置 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource" />
        </bean>
        
        <!-- 通过mybatis来扫描对应的接口,并实施注入 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
              <property name="basePackage" value="pro.app.inter" />
              <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplate" />
        </bean>
    </beans>

    上面这个配置文件中有几个类非常重要~

      首先隆重介绍了下 sqlSessionTemplate 这个类是MyBatis-Spring的核心,从配置中可以看出它引用了一个SessionFactory类,我们可以将它理解为一个高级的SessionFactory,它负责管理MyBatisSqlSession,通过spring优秀的资源管理,SqlSessionTemplate保证了SqlSession是和当前的事务是相关的。SqlSessionTemplate同时还管理着session的生命周期,也就是说它会自动的打开和关闭session

    之前的代码中,我们需要通过类似下面的代码获得Mapper的实例对象

     

    UserDAO users = session.getMapper(UserDAO.class);

    来获得接口的实例对象,现在把一切交给spring吧,懒人总是有这么多偷懒的办法 -_-!

     

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="basePackage" value="pro.app.inter" />
       <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplate" />
    </bean>

     

    通过 org.mybatis.spring.mapper.MapperScannerConfigurer类,spring为我们准备好了所有需要使用的接口类。

    在同级目录下还要放入jdbc.properties配置文件

    jdbc.driverClassName=org.gjt.mm.mysql.Driver
    jdbc.url=jdbc:mysql://localhost:3306/blog?useUnicode=true&amp;characterEncoding=utf-8
    jdbc.username=mybatis
    jdbc.password=mybatis
    jdbc.maxActive =10
    jdbc.maxIdle =10
    jdbc.minIdle=10
    jdbc.initialSize=10
    jdbc.maxWait =3000

    测试结果

    Now,让我们试试这个神奇的配置。

    新建一个测试类

    public class Test {
        public static void main(String args[]){
            //暂时通过这个类获得spring配置文件
            ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
            UserMapper userDao= (UserMapper)ac.getBean("userMapper");
            System.out.println(userDao);
            User user = userDao.selectOne(1);
            System.out.println(user.getName());
        }
    }

    接着,它很顺利地打印出了

    mybatis

    相比之前各种打开关闭和异常处理,这里的代码是不是少了很多,mybatis从此赶上了别人家的孩子~

    总结

    使用mybatis-spring来管理SessionFactory

    Mybatis-spring官网 http://mybatis.github.io/spring/zh/

  • 相关阅读:
    51 nod 1109 01组成的N的倍数
    zoj 1530 Find The Multiple
    洛谷 P1124 文件压缩
    洛谷 P1270 “访问”美术馆(树形DP)
    洛谷 P1272 重建道路(树形DP)
    ♫【CSS】命名颜色
    【注释】
    -_-#【命名】BEM
    ☀【jQuery插件】DOM 延迟渲染
    ☀【组件】getRequest
  • 原文地址:https://www.cnblogs.com/whthomas/p/3809045.html
Copyright © 2011-2022 走看看