发表于: 2017-04-23 11:41:27
1 1242
今天完成的事情:
学习原始dao开发的spring和mybatis的整合;
学习mapper代理方法的spring和mybatis的整合;
明天计划的事情:
遇到的问题:
1)使用原始dao方法进行mybatis和spring整合的时候:
在spring的配置文件applicationContext.xml中配置了SqlSessionFactory(会话工厂)和dataSource(数据源);
创建User.xml映射文件;
在mybatis的配置文件SqlMapConfig.xml中加载User.xml映射文件;
创建dao接口;
让dao接口实现类集成SqlSessionDaoSupport类;
在applicationContext.xml中配置dao;
编写Junit测试代码
一切准备完成以后,测试时发现如下问题:
2)在使用spring 进行mapper批量扫描配置后一直报错。配置代码如下:
<!-- mapper批量扫描,从mapper包中扫描出mapper接口自动创建代理对象并且在spring容器中注册
前提:使用mapper代理方法
规范:需要将mapper接口类名和mapple.xml映射文件名称保持一致, 且在同一个目录中
自动扫描出来的mapper的bean的id为mapper类名(首字母小写)
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定扫描的包名
如果扫描多个包,每个包中间使用半角逗号分隔
-->
<property name="basePackage" value="com.jason.ssm.mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
一直报错显示:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [C:\Users\Jason\workspace\spring_project2\bin\com\jason\ssm\mapper\UserMapper.class]; nested exception is java.lang.IllegalArgumentException
解决方法:
查看JDK版本和spring版本兼容问题,将JDK改为1.7后,就可以与3.2版本的spring兼容了。
(花了好长时间,才找到这个原因,其实一开始就应该想到的,因为报错显示是编译UserMapper.class的时候出现了问题,可是就是没想到spring3.2版本和jdk1.8版本的不兼容问题)
收获:
1) 在spring和mybatis整合的时候,一定要注意好每一个细节,包括大小写,比如说SqlSessionFactory, sqlSessionFactory,它们的区别虽然只差一个字母,但是一旦写错,让你去找bug,会浪费很多时间。
2) 我认为,编程的学习遵循一种规则就是让复杂的事情变得简单。近期的学习让我体会到了设计者的巧妙,比如说typeAliases别名的设计、namespace命名空间的设计、db.properties的设计、输入映射传递pojo的包装对象以及输出映射的resultMap的使用,mapper通过指定package="包的路径"批量加载映射文件。
3) 总结了原始dao方法整合spring和mybatis的工程结构图
4) 总结了mapper代理方法整合spring和mybatis的工程结构图:
评论