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>

  • 相关阅读:
    进程池,线程池,协程,gevent模块,协程实现单线程服务端与多线程客户端通信,IO模型
    线程相关 GIL queue event 死锁与递归锁 信号量l
    生产者消费者模型 线程相关
    进程的开启方式 进程的join方法 进程间的内存隔离 其他相关方法 守护进程 互斥锁
    udp协议 及相关 利用tcp上传文件 socketserver服务
    socket套接字 tcp协议下的粘包处理
    常用模块的完善 random shutil shevle 三流 logging
    day 29 元类
    Django入门
    MySQL多表查询
  • 原文地址:https://www.cnblogs.com/nyhhd/p/12547435.html
Copyright © 2011-2022 走看看