转载请注明出处:
前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(八)——MyBatis查询缓存
1.整合思路
需要Spring通过单例方式管理SqlSessionFactory。
Spring和MyBatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(Spring和MyBatis整合自动完成)
持久层的mapper都需要由Spring进行管理。
2.整合环境
创建一个java工程(接近实际开发的工程结构)
jar包:
mybatis3.2.7的jar包
spring3.2.0的jar包
dbcp连接池
数据库驱动
mybatis和spring的整合包:早期ibatis和spring整合是由spring官方提供,mybatis和spring整合由mybatis提供。


3.spring配置文件
在applicationContext.xml配置sqlSessionFactory和数据源。SqlSessionFactory在mybatis和spring的整合包下。
4.Mapper编写的三种方法
4.1原始dao开发(和spring整合后)
4.1.1User.xml
在SqlMapConfig.xml中加载User.xml
4.1.2 dao(实现类继承SqlSessionDaoSupport)
public interface UserDao {//根据id查询用户信息public User findUserById(int id) throws Exception;
}dao接口实现类需要注入SqlSessionFactory,通过spring进行注入。
这里用spring声明配置方式,配置dao的bean:让UserDaoImpl实现类继承SqlSessionDaoSupport。
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{
@Overridepublic User findUserById(int id) throws Exception {//继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSessionSqlSession sqlSession=this.getSqlSession();
User user=sqlSession.selectOne("test.findUserById", id);return user;
}
}4.1.3配置dao
在applicationContext.xml中配置dao。
4.1.4测试程序
public class UserDaoImplTest {private ApplicationContext applicationContext;
@Beforepublic void setUp(){
applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
}
@Testpublic void findUsetByIdTest() throws Exception{
UserDao userDao=(UserDao) applicationContext.getBean("userDao");
User user=userDao.findUserById(1);
System.out.println(user);
}
}4.2mapper代理开发
4.2.1mapper.xml和mapper.java

public interface UserMapper {public User findUserById(int id) throws Exception;
}4.2.2通过MapperFactoryBean创建代理对象
在applicationContext.xml中配置mapper。
4.2.3测试程序
public class UserMapperTest {private ApplicationContext applicationContext;
@Beforepublic void setUp(){
applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
}
@Testpublic void findUsetByIdTest() throws Exception{
UserMapper userMapper=(UserMapper) applicationContext.getBean("userMapper");
User user=userMapper.findUserById(1);
System.out.println(user);
}
}此方法的问题:需要针对每个mapper进行配置,麻烦。
4.3通过MapperScannerConfigurer进行mapper扫描(建议使用)
在applicationContext.xml中配置mapper批量扫描。
此时,SqlMapConfig.xml中批量加载joanna.yan.mapper下mapper的配置就可以省略掉了。

测试程序:
@Testpublic void findUsetByIdTest() throws Exception{
UserMapper userMapper=(UserMapper) applicationContext.getBean("userMapper");
User user=userMapper.findUserById(1);
System.out.println(user);
}










