1.整合思路
需要spring通过单例的模式管理sqlSessionFactory,spring和mybatis整合生成代理对象,使用sqlSessionFactory创建sqlSession,持久层的mapper都需要有spring管理
2.整合环境
mybatis的jar包 ,spring的jar包
mybatis与spring整合包:早起ibatis与spring整合包由spring提供,现在mybatis与spring的整合包由mybatis提供,mybatis-spring-1.2.2.jar
3.sqlSessionFactory会话工厂
在spring的配置文件中配置sqlSessionFactory与数据源,sqlSessionFactory在mybatis和spring的整合包下
spring的配置文件如下配置sqlSessionFactory和数据源:
<bean id="sqlSessionFactory" class =" .sqlSessionFactory" >
<property name="configLocation" value="mybatis的全局配置文件" />
<property name="dataSource" ref="dataSource"/> //ref 中的dataSource 是数据源的id
</bean>
<bean id="dataSource" class=" "> //配置数据源 ,class表示的是一种链接数据库的方法类,spring 中jdbc的,或者其他的连接池
数据库的配置如<property id="password" value="password" />
</bean>
4.原始的dao层开发(与spring整合)
4.1mapper.xml
写完mapper要在sqlMapConfig.xml中加载
4.2dao层
让测试类(执行类)继承SqlSessionDaoSupport类(这个类自带setSQLSeeFactory方法)
SqlSession的获取方法改为:
SqlSession sqlSession = this.getSqlSession();
sqlSession.close();//可以去掉,spring代理后,自动释放资源(即在编写时,最后关闭sqlSession可以不用写)
4.3在spring配置文件中配置sqlSessionFactory
<bean id="测试类(执行类)" class="测试类的全路径名如:com.cn.类名">
<property name="sqlSessionFactory" ref="sqlSessionFactory" /> //ref是在配置文件中写好的bean的id,看上面的 第3步
</bean>
4.4测试前要得到spring容器
即在主函数中获取测试类的bean
5.mapper代理的方法
5.1mapper.xml
userMapper.xml userMapper.java
5.2配置mapper
整合包里有org.mybatis.spring.mapper.MapperFactoryBean
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="UserMapper.java的全路径名" />//这是进行配置执行数据库操作的接口类
<property name="property" name="sqlSessionFactory" ref="sqlSessionFactory" />//同样这里的ref中的sqlSessionFactory在3步骤中已经配置过了
</bean>
5.3测试类
如果用第4步最后的方法继续用ApplicationContext获取5.2中的bean,每一个mapper的接口都需要配置如此,麻烦.
解决:mapper批量扫描mapper的接口,自动创建代理对象,并且在spring容器中注入(建议使用,代码简洁),
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="包名" /> //指定要扫描的包名
<property name="sqlSessionFactory" value="sqlSessionFactory"/>
</bean>
可以参照这篇:http://blog.csdn.net/pruett/article/details/78452191
PS:如果要扫描多个包,用半角逗号分隔 ,扫描出的mapper的id是mapper类名(首字母小写,id在ApplicationContext获取的时候用,5.3中的获取一个包和5.2中的单个的获取用一个即可)