发表于: 2017-04-23 11:41:27

1 1240


今天完成的事情:

学习原始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的工程结构图:



返回列表 返回列表
评论

    分享到