一、整合思路
spring通过单例的方式管理sqlSessionFactory
spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession
持久层的mapper都由spring进行管理
二、整合环境
创建一个新的java工程(接近实际开发的工程结构)
jar包:
mybatis3.2.7的jar包
spring3.2.0的jar包
dbcp连接池
数据库驱动
log4j
mybatis和spring的整合包:早期ibatis和spring整合是由spring官方提供,mybatis和spring整合由mybatis提供。
三、spring配置文件
在applicationContext.xml配置sqlSessionFactory和数据源
sqlSessionFactory在mybatis和spring的整合包下。
四、Mapper编写的三种方法
4.1原始Dao开发(和spring整合后)
4.11 User.xml
在SqlMapconfig.xml中加载User.xml
4.12 dao(实现类继承SqlSessionDaoSupport)
public interface UserDao {
//鏍规嵁id鏌ヨ鐢ㄦ埛淇℃伅
public User findUserById(int id) throws Exception;
}
dao接口实现类需要注入SqlSessoinFactory,通过spring进行注入。
这里采用spring声明配置方式,配置dao的bean并且让UserDaoImpl实现类继承SqlSessionDaoSupport
UserDaoImpl如下
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
@Override
public User findUserById(int id) throws Exception {
//缁ф壙SqlSessionDaoSupport锛岄?杩噒his.getSqlSession()寰楀埌sqlSessoin
SqlSession sqlSession = this.getSqlSession();
User user = sqlSession.selectOne("test.findUserById", id);
return user;
}
4.13配置dao
在applicationContext.xml中配置dao。
测试程序
public class UserDaoImplTest {
private ApplicationContext applicationContext;
//在setUp方法中得到spring的容器
@Before
public void setUp() throws Exception {
applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
}
@Test
public void testFindUserById() throws Exception {
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
User user = userDao.findUserById(1);
System.out.println("Result: "+user);
}
}
4.2 Mapper代理开发
4.21 mapper.xml
mapper.java
public interface UserMapper {
public User findUserById(int id) throws Exception;
}
4.22 通过MapperFactoryBean创建代理对象
在applicationContext.xml中配置mapper
mapperInterface指定mapper接口
-
4.23 测试程序
public class UserMapperTest {
private ApplicationContext applicationContext;
//在setUp方法中得到spring的容器
@Before
public void setUp() throws Exception {
applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
}
@Test
public void testFindUserById() throws Exception {
UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");
User user = userMapper.findUserById(1);
System.out.println(user);
}
}
4.3 通过MapperScannerConfigurer进行mapper扫描(建议使用)
此时,SqlMapConfig.xml中批量加载mapper的配置就可以省略掉了
测试程序
@Test
public void findUsetByIdTest() throws Exception{
UserMapper userMapper=(UserMapper) applicationContext.getBean("userMapper");
User user=userMapper.findUserById(1);
System.out.println(user);
}