MyBatis3.0应该说出现已经很久了,基于iBatis2.0的基础上也有不少的用户.在使用细节上是有区别的.Spring3.0发布的时候由于他还没有发布稳定的版本,所以Spring只对2.0版本提供支持.如果要使用只能用项目本身提供的解决方案.想必作者们应该对2.0之前的整合方式很有了解,现在提供的方案可以直接不用写DAO实现类的代码.
整合需要的包是mybatis-spring-x.x.x.jar.接着在spring的配置文件中配置sqlSessionFactory.然后将他注入给所需要的DAO.关于DAO的实现有多种方法.个人倾向于直接用配置,不写DAO的实现代码.
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource"></property>
- <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
- </bean>
- <bean id="sysUserDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
- <property name="mapperInterface" value="cn.lihk.example.s2sm.dao.SysUserDao"></property>
- <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
- </bean>
上述的配置声明了一个sqlSessionFactory.它需要一个数据源.DAO的实现类都是通过MapperFactoryBean这个工厂Bean来获得的.它的mapperInterface就是dao的接口.如此配置后就可以不用写DAO的实现类了.我们来看看sqlSessionFactory的configLocation,这个是Mybatis的总配置文件.配置的是sqlSession的全局属性.
- <configuration>
- <settings>
- <setting name="cacheEnabled" value="true"></setting>
- <setting name="lazyLoadingEnabled" value="true"></setting>
- <setting name="multipleResultSetsEnabled" value="true"></setting>
- <setting name="useColumnLabel" value="true"></setting>
- <setting name="useGeneratedKeys" value="true"></setting>
- <setting name="defaultExecutorType" value="SIMPLE"></setting>
- <setting name="defaultStatementTimeout" value="25000"></setting>
- </settings>
- <mappers>
- <mapper resource="cn/lihk/example/s2sm/dao/mapper/SysUserDao.xml"></mapper>
- </mappers>
- </configuration>
上面是sqlMapConfig.xml的配置内容他配置了一些全局属性和具体的mapper映射文件.这个mapper映射文件是具体对象和SQL映射关系的配置.
- <mapper namespace="cn.lihk.example.s2sm.dao.SysUserDao">
- <resultmap type="cn.lihk.example.s2sm.vo.SysUser" id="sysUserResultMap">
- <id property="id" column="id">
- <result property="name" column="name">
- <result property="note" column="note">
- </result></result></id></resultmap>
- <select id="getSysUsers" resultmap="sysUserResultMap">
- select * from sys_user
- </select>
- <select id="getSysUserById" resulttype="cn.lihk.example.s2sm.vo.SysUser">
- select * from sys_user where id=#{id}
- </select>
- </mapper>
上面配置了一个Mapper.和2.0版本是很类似的.注意的一点是namespace必须是接口的全局限定名,否则会报错.这个估计是要看源码才能明白为什么如此设置.经过上述配置后基本上整合就算完成了.和2.0版本+spring+daozero是非常相像的.只不过现在是mybatis官方的方案.不需要daozero或者类似的项目.关于数据源,事务控制的方式还是跟普通的spring配置没有区别.