1, mybatis官方提供與mybatis與spring整合jar包java
2, spring相關jar包 3,mybatis相關包 4,c3p0鏈接池 5, MySQL數據庫驅動mysql
在classpath下建立mybatis-config.xmlspring
在與spring整合前, mybatis配置文件中配置 數據庫鏈接池 , 事物管理器, 映射文件 等 . 在與spring整合後其中數據庫鏈接池, 事物管理器交給spring進行管理sql
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper .//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="userMapper"> <select id="findUserById" parameterType="int" resultType="cn.sang.model.User"> SELECT * FROM USER WHERE id = #{id} </select> </mapper>
在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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-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/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<!-- 註解式掃描基本包實例化類 spring掃描器只掃描Service層,Controller層由springMvc負責掃描, Dao層有Mybatis複製掃描 --> <context:component-scan base-package="cn.sang.service.imp"/> <!-- 讀取properties配置文件 擴展性很差的方式 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 數據庫鏈接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!-- 驅動 --> <property name="driverClass" value="${driverClass}"/> <!-- url --> <property name="jdbcUrl" value="${jdbcUrl}"/> <!-- 用戶名 --> <property name="user" value="${user}"/> <!-- 密碼 --> <property name="password" value="${password}"/> </bean> <!-- 讓spring管理sqlSessionfactory 使用myBatis和spring整合包中的 , 在定義sqlSessionFactory時指定數據源dataSource和myBatis的配置文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 數據庫鏈接池 --> <property name="dataSource" ref="dataSource" /> <!-- 加載myBatis的全局配置文件 --> <property name="configLocation" value="classpath:mybatis-config.xml" /> </bean> <!-- 配置數據源事物 註解式開發 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 開啓註解驅動 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- Dao實現類開發 --> <!-- 爲何要在此處配置dao的實例化,由於spring掃描包實例化並無掃描dao層,須要mybatis進行掃描, 因此此處須要進行實例化的配置 --> <!-- 此處配置後,dao實現類被實例化,能夠在srevice能掃描到地方使用註解autowraid的方式注入使用--> <bean id="userDao" class="cn.sang.dao.imp.UserDaoImp"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean> </beans>
須要配置內容以下 :spring-mvc
1.1 此處使用註解式事物管理, 分爲兩步 , (1配置數據源事物 2 開啓註解驅動)mybatis
<!--配置數據源事物 註解式開發 --> <beanclass="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <propertyname="transactionManager"ref="dataSource"/> </bean> <!--開啓註解驅動 --> <tx:annotation-driven/>
2, 讀取jdbc.properties文件 , 兩種方式mvc
2.1擴展性很差的方式app
<!--加載properties配置文件 -->ui
<context:property-placeholderlocation="classpath:jdbc.properties"/>
2.2 擴展性好的方式
<!-- 讀取properties文件 --> <beanclass="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <propertyname="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean>
<!-- 數據庫鏈接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!-- 驅動 --> <property name="driverClass" value="${driverClass}"/> <!-- url --> <property name="jdbcUrl" value="${jdbcUrl}"/> <!-- 用戶名 --> <property name="user" value="${user}"/> <!-- 密碼 --> <property name="password" value="${password}"/> </bean>
做用 : 在未使用spring管理sqlSessionFactory以前,每次使用sqlSessionFactory都要在代碼中讀取mybatis配置文件使用sqlSessionFactoryBuilder類建立sqlSessionFactory,獲取sqlSession . 使用spring配置文件管理sqlSessionFactory的建立後就能夠省去重複建立sqlSessionFactory的代碼
<!--讓spring管理sqlSessionfactory使用myBatis和spring整合包中的 , 在定義sqlSessionFactory時指定數據源dataSource和myBatis的配置文件 --> <bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 數據庫鏈接池 --> <propertyname="dataSource"ref="dataSource"/> <!--加載myBatis的全局配置文件 --> <propertyname="configLocation"value="classpath:mybatis-config.xml"/> </bean>
注意 : spring的掃描器只掃描Service層 , Dao層由Mybatis負責掃描 , 若是Dao層是接口則不須要掃描 .Controller層由SpringMvc負責掃描 , 因此在spring配置文件的掃描器要排除掃描Controller層
<!-- 註解式掃描基本包實例化類 spring掃描器只掃描Service層,Controller層由springMvc負責掃描,Dao層有Mybatis複製掃描 -->
<context:component-scan base-package="cn.sang.service.imp"/>
註解式開發中, spring的掃描器只掃描service層, springmvc掃描器掃描controller層 , mybatis掃描dao層 , 若是dao實現類沒有被掃描 , 能夠在spring配置文件中經過配置bean的方式, 進行實例化 , 而後在service層能夠使用autowraid註解進行注入使用
<!-- Dao實現類開發 --> <!-- 爲何要在此處配置dao的實例化,由於spring掃描包實例化並無掃描dao層, 須要mybatis進行掃描,因此此處須要進行實例化的配置 --> <!-- 此處配置後,dao實現類被實例化,能夠在srevice能掃描到地方使用註解autowraid的方式注入使用--> <bean id="userDao" class="cn.sang.dao.imp.UserDaoImp"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>