1. 程式人生 > >Spring整合之Mybatis隨筆

Spring整合之Mybatis隨筆

<!-- 載入配置檔案 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 資料庫連線池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />

<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean>

<!-- 配置sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>
<!-- mybatis全域性配置檔案 -->
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"/>
</bean>

 mybatis全域性配置檔案:SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

<typeAliases>
<!-- 批量定義別名,通過package設定pojo所在包
如果需要讓mybatis掃描多個包,定義多個package
mybatis掃描包下邊的pojo自動將包下所有pojo定義別名,別名名稱是類名(首字母小寫或大寫都可以)
-->
<package name="cn.itcast.mybatis.po" />
</typeAliases>
</configuration>

<--mapper代理方法,使用MapperFactoryBean -->
<!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
mapper介面地址
<property name="mapperInterface" value="cn.******.mybatis.mapper.UserMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

如果UserMapper包中的檔案太多應該採用掃描的方式來解決問題

<!-- 使用MapperScannerConfigurer掃描mapper
掃描器將mapper掃描出來自動 註冊到spring容器,bean的id是類名(首字母小寫)
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定掃描的包 
如果掃描多個包中間使用半形逗號分隔
如果使用掃描器,不用在sqlmapconfig.xml中去配置mapper的掃描了,如果使用mapper代理的開發,在SqlMapConfig.xml中不用配置mapper項了
-->
<property name="basePackage" value="cn.****.mybatis.mapper"/>
<!-- 使用sqlSessionFactoryBeanName注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 
注意: 這裡使用sqlSessionFactoryBeanName而不使用sqlSessionFactory原因如下:
MapperScannerConigurer在掃描mapper時需要注入 sqlSessionFactory,如果使用
<property name="sqlSessionFactory" ref="sqlSessionFactory"/> 
會存在PropertyPlaceholderConfigurer還沒來得及替換dataSource定義中的${jdbc.driver}等資料來源變數就注入到了MapperScannerConigurer中,將導致資料庫連線不上,如果改為如下方式可以解決問題:
 -->