一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Spring整合Mybatis使用 時的坑

Spring整合Mybatis使用 時的坑

2020-05-21 11:20永志 JAVA教程

這篇文章主要介紹了Spring整合Mybatis使用時的坑 的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

背景

  最近項目要上線,需要開發一個數據遷移程序。程序的主要功能就是將一個數據庫里的數據,查詢出來經過一系列處理后導入另一個數據庫??紤]到開發的方便快捷。自然想到用spring和mybatis整合一下。甚至用mybatis的自動代碼生成,可以省下大量dao層的開發。

整合的坑

之前的項目:以前也有過這種類似的程序,就把spring和mybatis整合的配置直接拿來修改下用。之前的整合配置是這樣子的:

   1、考慮到數據庫url、用戶名密碼的可配置性,將這些信息放入properties文件。在spring配置文件里使用了

  <context:property-placeholder location="classpath:config.properties" />

    2、在spring配置文件里的mybatis和spring的整合配置是這樣

?
1
2
3
4
5
6
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.lagou.chat.record.transfer.dao" />
</bean>

  以上配置是沒有問題的。所以就直接將配置拷貝到新項目

 當前項目:將老項目的配置拷貝過來,但是新的項目要連接兩個數據庫,自然需要兩個數據源(record和im),就對老的配置做了如下修改

    1、使用properties文件的配置不變

    2、之前因為就一個數據源(一個sqlSessionFactory),所以沒有在MapperScannerConfigurer下配置<property name="sqlSessionFactory" ref="sqlSessionFactory"/>。因為默認使用sqlSessionFactory。但現在兩個數據源了,不指定肯定導致混亂。所以配置修改為如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<bean id="record_sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="record_dataSource" />
</bean>
<bean id="config1" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxx.util.rollback.record.dao" />
<property name="sqlSessionFactory" ref="record_sqlSessionFactory"/>
</bean>
<bean id="im_sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="im_dataSource" />
</bean>
<bean id="config2" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxx.util.rollback.im.dao" />
<property name="sqlSessionFactory" ref="im_sqlSessionFactory"/>
</bean>

  結果就是運行新項目時,spring配置文件里的${jdbc.url},${jdbc.name}等屬性無法被properties里的指定值替換。一開始自然想不到是因為spring和mybatis整合的原因,所以一度不斷檢查spring配置文件是否有誤,properties文件是否有誤,是不是properties文件沒被引用到或者properties文件沒有被編譯到classpath目錄下等。當然,分析沒有分析出問題的原因,自然就不可能找到解決問題的辦法。只好求助于網絡。最終還是找到了答案

  修正方式:將配置需改為如下,問題得到了解決:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<bean id="record_sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="record_dataSource" />
</bean>
<bean id="config1" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxx.util.rollback.record.dao" />
<property name="sqlSessionFactoryBeanName" value="record_sqlSessionFactory"/>
</bean>
<bean id="im_sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="im_dataSource" />
</bean>
<bean id="config2" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxx.util.rollback.im.dao" />
<property name="sqlSessionFactoryBeanName" value="im_sqlSessionFactory"/>
</bean>

  就是將sqlSessionFactory屬性改為sqlSessionFactoryBeanName。當然也得將ref改為value。因為sqlSessionFactoryBeanName屬性是字符串類型

原因

  spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 進行自動掃描的時候,設置了sqlSessionFactory 的話,可能會導致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}這樣之類的表達式,將無法獲取到properties文件里的內容。

  導致這一原因是因為,MapperScannerConigurer實際是在解析加載bean定義階段的,這個時候要是設置sqlSessionFactory的話,會導致提前初始化一些類,這個時候,PropertyPlaceholderConfigurer還沒來得及替換定義中的變量,導致把表達式當作字符串復制了。 但如果不設置sqlSessionFactory 屬性的話,就必須要保證sessionFactory在spring中名稱一定要是sqlSessionFactory ,否則就無法自動注入。

以上所述是小編給大家介紹的Spring整合Mybatis使用<context:property-placeholder>時的坑 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人一区二区三区视频免费蜜 | 精品区卡一卡2卡三免费 | 精品人伦一区二区三区潘金莲 | 日本网络视频www色高清免费 | 俄罗斯女人与公拘i交酡 | 国产天天在线 | 亚瑟天堂久久一区二区影院 | jk制服白丝超短裙流白浆 | 欧美日韩一区二区中文字幕视频 | 午夜福利合集1000在线 | 久久99精品国产自在自线 | 男人好大好硬好爽免费视频 | 特黄级 | 亚洲美色综合天天久久综合精品 | 亚洲欧美综合人成野草 | 91天堂在线| yellow片在线观看| 日你逼 | 国产亚洲毛片在线 | 男人爱看的网站 | 亚洲sss综合天堂久久久 | 成人福利免费视频 | 91四虎国自产在线播放线 | 五月天婷婷网亚洲综合在线 | www.9p234.com| 国产尤物视频 | ffee性xxⅹ另类老妇hd | 四虎影院在线免费 | 好奇害死猫在线观看 | 好男人资源大全免费观看 | 毛片a级放荡的护士hd | 亚洲国产99在线精品一区69堂 | a亚洲视频| 99re5精品视频在线观看 | 精品九九视频 | 欧亚精品一区二区三区 | 亚洲第一免费播放区 | 国产欧美日韩在线观看精品 | 亚洲AV精品无码喷水直播间 | 国产第一福利影院 | 亚洲精品国产精品麻豆99 |