Mybatis整合Spring

一、整合思路

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提供。


image.png

三、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代理开发

image.png

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的配置就可以省略掉了

Snipaste_2019-12-11_17-33-07.png

测试程序

   @Test
    public void findUsetByIdTest() throws Exception{
        UserMapper userMapper=(UserMapper) applicationContext.getBean("userMapper");
        User user=userMapper.findUserById(1);
        System.out.println(user);
    }

你可能感兴趣的:(Mybatis整合Spring)