奮斗了好幾個(gè)晚上調(diào)試程序,寫了好幾篇博客,終于建立起了Mybatis配置的擴(kuò)展機(jī)制。雖然擴(kuò)展機(jī)制是重要的,然而如果沒(méi)有真正實(shí)用的擴(kuò)展功能,那也至少是不那么鼓舞人心的,這篇博客就來(lái)舉幾個(gè)擴(kuò)展的例子。
這次研讀源碼的起因是Oracle和MySQL數(shù)據(jù)庫(kù)的兼容性,比如在Oracle中使用雙豎線作為連接符,而MySQL中使用CONCAT函數(shù);比如Oracle中可以使用DECODE函數(shù),而MySQL中只能使用標(biāo)準(zhǔn)的CASE WHEN;又比如Oracle中可以執(zhí)行DELETE FORM TABLE WHERE FIELD1 IN (SELECT FIELD1 FORM TABLE WHERE FIELD2=?),但是MySQL中會(huì)拋出異常,等等。下面就從解決這些兼容性問(wèn)題開(kāi)始,首先需要在配置中添加數(shù)據(jù)庫(kù)標(biāo)識(shí)相關(guān)的配置:
<!-- 自行構(gòu)建Configuration對(duì)象 --> <bean id="mybatisConfig" class="org.dysd.dao.mybatis.schema.SchemaConfiguration"/><bean id="sqlSessionFactory" p:dataSource-ref="dataSource" class="org.dysd.dao.mybatis.schema.SchemaSqlSessionFactoryBean"> <!-- 注入mybatis配置對(duì)象 --> <property name="configuration" ref="mybatisConfig"/> <!-- 自動(dòng)掃描SqlMapper配置文件 --> <property name="mapperLocations"> <array> <value>classpath*:**/*.sqlmapper.xml</value> </array> </property> <!-- 數(shù)據(jù)庫(kù)產(chǎn)品標(biāo)識(shí)配置 --> <property name="databaseIdProvider"> <bean class="org.apache.ibatis.mapping.VendorDatabaseIdProvider"> <property name="properties"> <props> &nbs