Mybatis整合Spring
根據官方的說法,在ibatis3,也就是Mybatis3問世之前,Spring3的開發工作就已經完成了,所以Spring3中還是沒有對Mybatis3的支持。
因此由Mybatis社區自己開發了一個Mybatis-Spring用來滿足Mybatis用戶整合Spring的需求。下面就將通過Mybatis-Spring來整合Mybatis跟
Spring的用法做一個簡單的介紹
MapperFactoryBean
首先,我們需要從Mybatis官網上下載Mybatis-Spring的jar包添加到我們項目的類路徑下,當然也需要添加Mybatis的相關jar包和Spring的
相關jar包。我們知道在Mybatis的所有操作都是基於一個SqlSession的,而SqlSession是由SqlSessionFactory來產生的,SqlSessionFactory又
是由SqlSessionFactoryBuilder來生成的。但是Mybatis-Spring是基於SqlSessionFactoryBean的。在使用Mybatis-Spring的時候,我們也需要
SqlSession,而且這個SqlSession是內嵌在程序中的,一般不需要我們直接訪問。SqlSession也是由SqlSessionFactory來產生的,但是Mybatis-Spring
給我們封裝了一個SqlSessionFactoryBean,在這個bean里面還是通過SqlSessionFactoryBuilder來建立對應的SqlSessionFactory,進而獲取到對應的
SqlSession。通過SqlSessionFactoryBean我們可以通過對其指定一些屬性來提供Mybatis的一些配置信息。所以接下來我們需要在Spring的applicationContext
配置文件中定義一個SqlSessionFactoryBean
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:com/tiantian/ckeditor/mybatis/mappers/*Mapper.xml" /> <property name="typeAliasesPackage" value="com.tiantian.ckeditor.model" /> </bean>
在定義SqlSessionFactoryBean的時候,dataSource屬性是必須指定的,它表示用於連接數據庫的數據源。當然,我們也可以指定一些其他的屬性,下面簡單列舉幾個:
- mapperLocations:它表示我們的Mapper文件存放的位置,當我們的Mapper文件跟對應的Mapper接口處於同一位置的時候可以不用指定該屬性的值
- configLocation:用於指定Mybatis的配置文件位置。如果指定了該屬性,那么會以該配置文件的內容作為配置信息構建對應的SqlSessionFactoryBuilder,但是后續屬性指定的內容會覆蓋該配置文件里面指定的對應內容
- typeAliasesPackage:它一般對應我們的實體類所在的包,這個時候會自動取對應包中不包括包名的簡單類名作為包括包名的別名。多個package之間可以用逗號或者分號等來進行分隔(value的值一定要是包的全)
- typeAliases:數組類型,用來指定別名的。指定了這個屬性后,Mybatis會把這個類型的短名稱作為這個類型的別名,前提是該類上沒有標注@Alias注解,否則將使用該注解對應的值作為此種類型的別名(value的值一定要是類的完全限定名)
<property name="typeAliases"> <array> <value>com.tiantian.mybatis.model.Blog</value> <value>com.tiantian.mybatis.model.Comment</value> </array> </property>
- plugins:數組類型,用來指定Mybatis的Interceptor
- typeHandlersPackage:用來指定TypeHandler所在的包,如果指定了該屬性,SqlSessionFactoryBean會自動把該包下面的類注冊為對應的TypeHandler。多個package之間可以用逗號或者分號等來進行分隔
- typeHandlers:數組類型,表示TypeHandler