SM的整合
我们前面学过Mybatis,那么现在如果讲Mybatis和Spring联合起来一起使用,效果会怎么样呢?我们又有那些东西需要在Spring中配置呢?Spring又能帮我们管理那些东西呢?
整合思路
- Spring管理SqlSessionFactory、bean
- Spring对于数据操作的支持:从Spring管理的factory中获取SqlSession
- SqlSession的数据操作依赖于:Mybatis
- 有以下bean需要管理
- DataSource
- SqlSessionFactory
- Dao
整合步骤
- 在Spring中配置DataSource以及SqlSessionFactory
- Mybatis的配置文件中映射Mapper
- Spring中配置dao实现类的bean
- 编写dao的实现类
- 测试代码
代码结构图
Spring配置文件
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-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-3.1.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.1.xsd">
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${driver}"></property>
<property name="password" value="${password}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="maxActive" value="10"></property>
<property name="maxIdle" value="5"></property>
</bean>
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="mybatis/MybatisMainCof.xml"></property>
</bean>
<bean id="userDao" class="dao.impl.UserDaoImpl">
<property name="sqlSessionFactory" ref="sessionFactory"></property>
</bean>
</beans>
<context:property-placeholder location="classpath:db.properties"/>
这一句是导入我们的db.properties也就是我们的数据源的属性文件<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
这一句就是配置我们的数据源了,记住这个class最好复制粘贴,避免打错<property name="driverClassName" value="${driver}"></property>
这里的driver可不是叫driver而是叫driverClassName- 一切名字都以jar包为准,不然你到时候找不到错误的
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
这一句就很简单了,就是配置SqlSessionFactoryBean<property name="configLocation" value="mybatis/MybatisMainCof.xml"></property>
这里就需要映射我们的Mapper文件了
<bean id="userDao" class="dao.impl.UserDaoImpl">
这个就是单纯的配置一个bean而已- 因为这个bean需要操作数据,所以需要 sessionFactory,所以还需要配置
<property name="sqlSessionFactory" ref="sessionFactory"></property>
- 因为这个bean需要操作数据,所以需要 sessionFactory,所以还需要配置
- 这个就是Spring的配置了,是不是觉得很简单,就那么几行
Mybatis配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
- 这里面就什么都不用写了,就只用映射mapper而已
Mapper以及对应的实体类
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.UserDao">
<select id="findById" parameterType="int" resultType="domain.User">
select * from tb_user where id=#{id}
</select>
</mapper>
public interface UserDao {
public User findById(int id);
}
UserDaoImpl
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{
@Override
public User findById(int id) {
SqlSession session=this.getSqlSession();
User user=session.selectOne("dao.UserDao.findById",id);
return user;
}
}
- 这里注意一下,我们继承了一个类,而且实现了我们的接口
- 继承这个类的原因是因为:我们需要通过这个类去找到我们的SqlSessionFactory以便能获取链接
测试类:
public class Text {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
UserDao userDao=(UserDao) ac.getBean("userDao");
User user=userDao.findById(1);
System.out.println(user);
}
}
- 这个测试类就很简单了,加载Spring
- 获取bean
- 使用bean
- 打印
总结
- 整合Mybatis的关键还是在于Spring的配置,以及dao的bean
- 以及Dao实现类的一个继承关系
- 整体思路看过一次代码过后还是很简单