zoukankan      html  css  js  c++  java
  • spring和mybatis的结合

    总体来说

      关键点在于把DataSource(数据源)配置到spring容器中,通过数据源获取数据库连接对象

      数据库连接池(pool):管理数据库连接对象

    1 Spring与jdbc结合
    jdbc编程不变,主要是Connection对象的维护,即配置并使用数据源(jdk规范的数据源,dbcp的数据源,spring提供的数据源,c3p0数据源)

    1)<!-- 基于jdk的规范数据源 -->
    <bean name="dataSource1"
      class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
    <property name="networkProtocol">
      <value>tcp</value>
    </property>
    <property name="databaseName">
      <value>XE</value>
    </property>
    <property name="driverType">
      <value>thin</value>
    </property>
    <property name="portNumber">
      <value>1521</value>
    </property>
    <property name="user">
      <value>briup</value>
    </property>
    <property name="serverName">
      <value>127.0.0.1</value>
    </property>
    <property name="password">
      <value>briup</value>
    </property>
    </bean>

    注意:别忘了读取配置文件
    <!-- 读取这个资源文件 读完之后下面就可以用${key}来去文件中的value值了 -->
    <!-- 这种方式是我们第一节学习的那种配置方式方式的简写 -->
    <context:property-placeholder location="com/briup/db/jdbc/jdbc.properties"/>

    2)<!-- dbcp数据源 -->
    <bean id="dataSource2"
      class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
      <value>${jdbc.driverClassName}</value>
    </property>
    <property name="url">
      <value>${jdbc.url}</value>
    </property>
    <property name="username">
      <value>${jdbc.username}</value>
    </property>
    <property name="password">
      <value>${jdbc.password}</value>
    </property>
    <!-- 最大连接数 -->
    <property name="maxActive">
    <value>80</value>
    </property>
    <!-- 最大空闲连接数 -->
    <property name="maxIdle">
    <value>20</value>
    </property>
    <!-- 最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间 单位:毫秒 -->
    <!-- 超过时间则抛出异常,如果设置为-1表示无限等待 -->
    <property name="maxWait">
    <value>3000</value>
    </property>
    </bean>

    3)<!-- spring提供的一种数据源 -->
    <bean id="dataSource3"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName">
      <value>${jdbc.driverClassName}</value>
    </property>
    <property name="url">
      <value>${jdbc.url}</value>
    </property>
    <property name="username">
      <value>${jdbc.username}</value>
    </property>
    <property name="password">
      <value>${jdbc.password}</value>
    </property>
    </bean>


    4)c3p0数据源
    <!-- c3p0数据源 -->
    <bean id="dataSource4" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="driverClass">
    <value>${jdbc.driverClassName}</value>
    </property>
    <property name="jdbcUrl">
    <value>${jdbc.url}</value>
    </property>
    <property name="user">
    <value>${jdbc.username}</value>
    </property>
    <property name="password">
    <value>${jdbc.password}</value>
    </property>

    <!--连接池中保留的最小连接数。 -->
    <property name="minPoolSize">
    <value>5</value>
    </property>

    <!--连接池中保留的最大连接数。Default: 15 -->
    <property name="maxPoolSize">
    <value>30</value>
    </property>

    <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
    <property name="initialPoolSize">
    <value>10</value>
    </property>

    <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
    <property name="maxIdleTime">
    <value>60</value>
    </property>

    <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
    <property name="acquireIncrement">
    <value>5</value>
    </property>

    <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
    <property name="idleConnectionTestPeriod">
    <value>60</value>
    </property>

    <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
    <property name="acquireRetryAttempts">
    <value>30</value>
    </property>
    </bean>

    数据源datasource,优点是包含数据库连接信息,可以帮我们获取数据库连对接象,
    而且可以提供数据库连接池(pool)的功能,帮我们管理、分配、释放数据库连接
    各个数据源连接池都有一些公有的属性,因为他们都是从javax.sql.datasource继承
    而来,而且都有最大连接数,初始化连接数等概念。同时,他们又分别有各自不同的属性,做了扩展。
    -------------------

    spring在jdbc的使用中还给我们提供了一个模板类:JdbcTemplate
    用以简化我们的jdbc操作[获取数据源,conn,statement,执行sqld,处理结果集,关闭资源]

    例如:
    //java类中的写法:
    public class JdbcTemplateDao implements AccountDao{
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
    this.jdbcTemplate = jdbcTemplate;
    }
    ...
    }
    //xml中进行配置
    <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <constructor-arg index="0" ref="dataSource"></constructor-arg>
    </bean>

    <bean name="dao" class="com.briup.db.jdbc.JdbcTemplateDao">
    <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>

    注意1:JdbcTemplate模板类如何使用:在htmlsingle中搜索即可,其中包含有大量的使用实例
    注意2:spring结合jdbc的时候,不论是否使用这个模板,jdbc操作的事务默认是自动提交的(和之前学习jdbc的时候是一致的)


    2 Spring与mybatis结合
    注意导入相关jar包:mybatis-spring-1.2.2.jar

    使用Spring整合mybatis时,可以使用mybatis-config.xml文件,也可以不使用

    <!-- 配置sqlSessionFactory 不使用mybatis-config.xml-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="typeAliasesPackage" value="com.briup.db"></property>
      <property name="configurationProperties">
    <props>
      <prop key="cacheEnabled">true</prop>
    </props>
    </property>
      <!-- 自动扫描mapping.xml文件 *.xml-->
      <property name="mapperLocations" value="classpath:com/briup/db/mybatis/AccountMapper.xml" />
    </bean>

    或者:

    <!-- 配置sqlSessionFactory 使用mybatis-config.xml-->
    <!-- 直接读取mybatis-config.xml文件,里面和之前配置的一样 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>


    最后还需要扫描mybatis中映射接口,以便spring为其生产对应的实现类

    <!-- 自动扫描映射接口所在的包 -->
    <!-- 将来可以通过接口的名字首字母小写作为beanName,从spring容器中拿出自动生成的该接口的实现类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="basePackage" value="com.briup.db" />
    </bean>

  • 相关阅读:
    Thrift --- 支持双向通信
    Go -- 配置监控系统
    Go -- RPC 之 Thrift
    Go -- 一致性哈希算法
    Go -- runtime.Gosched()的作用分析
    Go -- import使用及. _的作用解析
    BNF 和 ABNF 扩充巴科斯范式 了解
    转 HTTP.SYS 详解
    转 HTTP/2: The Long-Awaited Sequel
    网站分析
  • 原文地址:https://www.cnblogs.com/nyhhd/p/12547435.html
Copyright © 2011-2022 走看看