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>

原文地址:https://www.cnblogs.com/nyhhd/p/12547435.html