一、导入jar包
所需jar包为mybatis-3.2.0.jar
mybatis-spring-1.3.0.jar
下载地址
https://repo1.maven.org/maven2/org/mybatis/mybatis/
https://repo1.maven.org/maven2/org/mybatis/mybatis-spring/
二、 spring配置 引入mybatis
在刚刚的数据源配置文件applicationContext-datasource中,加上如下配置
<!-- mybatis 配置 开始--> <!-- mybatis的sqlSession工厂:sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!-- mybatis不用配置 configLocation --> <!-- <property name="configLocation" value="classpath:ibatis-config.xml"></property> --> <property name="mapperLocations" value="classpath*:com/**/mappers/**/*.xml" /> </bean> <!-- mybatis自动扫描加载映射文件,接口 basePackage:需要扫描的包--> <!-- basePackage配置错 异常Injection of autowired dependencies failed No qualifying bean of type [XXXMapper]--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.mvc.*.dao"></property> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- mybatis 配置 结束-->
上面的最终的正确配置这边遇到很多坑一开始使用的配置是sqlSessionFactory<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> ? <property name="basePackage" value="com.xxxx.dal.mapper" />? <property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" /> <!-- <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> --> </bean>
结果报错 java.lang.ClassNotFoundException: ${jdbc.driver}
后来改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,非bean,所以不会引发提前初始化问题
特别注意 改由使用sqlSessionFactoryBeanName注入之后 把ref 换成value 否则报错
org.springframework.beans.factory.BeanCreationException: Error creating bean with name'org.mybatis.spring.mapper.MapperScannerConfigurer#0'
......no matching editors or conversion strategy found
这点粗心的话容易被忽略掉
三、测试
1.使用generatorConfig.xml自动生成 实力类、dao、及映射文件
详见: http://blog.csdn.net/xiaxiaozhang/article/details/72851075
并新建service类和controller类
最终结构如图
附带一下 controller的代码 简单书写,只为测试
package com.mvc.mybatis.controller; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.mvc.mybatis.dao.model.MyInfo; import com.mvc.mybatis.dao.model.MyInfoCriteria; import com.mvc.mybatis.service.MyTestService;
/** * mybatis测试 * * @author xiazhang * @date 2017-6-15 */ @Controller public class MyBatisTestController { private static Logger logger = LoggerFactory.getLogger(MyBatisTestController.class); @Autowired private MyTestService myTestService; @RequestMapping(value="/myTest" , method = RequestMethod.POST) public void myTest(HttpServletRequest request , HttpServletResponse response) throws Exception{ MyInfoCriteria myInfo = new MyInfoCriteria(); List<MyInfo> myInfoList = myTestService.getMyInfoList(myInfo); if(myInfoList != null){ for (MyInfo myInfo2 : myInfoList) { logger.info("name:{};sex:{}",myInfo2.getName(),myInfo2.getSex()); } } } }
启动服务 发送post请求 http://localhost:8090/mySpringmvcWeb/myTest
结果
[INFO ] 2017-06-17 19:03:35 com.mvc.mybatis.controller.MyBatisTestController name:xiazhang;sex:男 [INFO ] 2017-06-17 19:03:35 com.mvc.mybatis.controller.MyBatisTestController name:nihao;sex:女
success