整合思路
需要spring通过方式管理SqlSessionFactory.
spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(Sping和mybati整合自动完成).
持久层的mapper都需要有spring进行管理.
整合环境
创建一个新的java工程.
mybatis的jar包,spring的jar包
spring和mybatis的整合包
参考:SSM的maven工程的创建
代码操作
一、创建配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 加载配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 数据源,使用dbcp -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<property name="maxActive" value="${maxActive}"/>
<property name="maxIdle" value="${maxIdle}"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 加载mybatis的配置文件-->
<property name="configLocation" value="mybatis/SqlMapperConfig.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
其他配置文件的创建
二、原始dao开发:applicationContext.xml
applicationContext.xml中的原始dao配置
<!-- 原始dao接口 -->
<bean id="userDao" class="club.lemos.ssm.dao.UserDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
测试文件:
public class UserDaoImplTest {
private ApplicationContext applicationContext;
@Before
public void setUp() throws Exception {
//获取spring的配置文件applicationContext.xml,这个配置文件中包含着dbcp数据源的相关配置.
//还包含着sqlSessionFactory的生成类SqlSessionFactoryBean.它可以让数据源和 sqlMapConfig.xml(配置了mapper的映射文件及mybatis的其他配置信息)相联系.
//还有原始的dao接口,这个接口依赖于上面的SqlSessionFactory 那么可以在dao的实现类中可以通过继承SqlSessionDaoSupport来
//获取sqlSessionFactory对象.
applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
}
@Test
public void findUserById() throws Exception {
//通过spring配置文件,获取userDao对象
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
//调用UserDao的方法
User userById = userDao.findUserById(1);
System.out.println(userById);
}
}
注意事项:
IntelliJ Idea编译报错:javacTask: 源发行版 1.7 需要目标发行版 1.7
解决办法:选中项目,右击选择Maven–>Reimport, 再次编译,问题解决。
原文:http://blog.csdn.net/wave_1102/article/details/47671019
或者,可以使用:关键是java编译插件。
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
三、mapper代理开发
applicationContext.xml中的mapper代理配置
<!--mapper代理配置,由mapper接口生成代理对象.原始dao的方法是根据实现类生成代理对象 -->
<!--<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">-->
<!--<property name="mapperInterface" value="club.lemos.ssm.mapper.UserMapper"/>-->
<!--<property name="sqlSessionFactory" ref="sqlSessionFactory"/>-->
<!--</bean>-->
<!--自动扫描mapper,其bean对象的id默认为接口名,首字母小写-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 这里不使用sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 指定扫描的路径 -->
<property name="basePackage" value="club.lemos.ssm"/>
</bean>
注意:使用IDEA的maven工具进行开发时,会出现spring代理器无法读取mapper配置文件 XXXMaper.xml的问题—— org.apache.ibatis.binding.BindingException
.
此时,可以尝试手动将其移动到对应接口的类路径下,看看能不能运行。
但是,实际开发中不可能这样做,可以在pom.xml中配置下面这句话:
...
<build>
<finalName>springmvc-study</finalName>
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
</build>
</project>
如果文件已经移动到指定的位置。还报错。那么可能是文件自身有问题。比如命名空间不正确。之前就是逆向工程生成的mapping文件的命名空间不正确导致这个问题。
END
来源:oschina
链接:https://my.oschina.net/u/3053700/blog/790103