Mybatis学习笔记——与Spring整合

SSM整合:Spring整合Mybatis

整合思路:

  1. 将SqlSessionFactory对象交给Spring容器管理。(单例)
  2. 原始Dao开发中,SqlSession对象也要从Spring容获得。(多例)
  3. Mapper代理模式开发中,要从Spring容器中获得Mapper对象。
  4. 数据库连接池、连接参数、事务管理等都交给Spring容器管理。

整合步骤:

  • 1. 导入jar包:

  1. spring的jar包
  2. Mybatis的jar包
  3. Spring+mybatis的整合包。
  4. Mysql的数据库驱动jar包。
  5. 数据库连接池的jar包。
  • 2. 书写Mybatis配置文件(sqlMapConfig.xml):





	
	
		
		
	

        
	
		
	

  • 3. 书写Spring配置文件(applicationContext.xml):




        

	
	

	
	
		
		
		
		
	

	
	
                
		
                
		
	

  • jdbc.properties内容如下:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///ssm?allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8&useSSL=false
jdbc.user=root
jdbc.password=123123

在Spring配置文件中,写了两种常用数据库连接池的配置方式,一种是c3p0,一种是dbcp(注释掉了)。

 

以上,如果配置都正确,那么Spring与Mybatis的整合算是初步完成,当使用时,需要添加哪些配置可以随时添加。接下来进行Mybatis的Mapper接口开发测试。

 

  • 原始Dao开发:在进行接口开发之前,回忆一下Spring原始Dao开发:

  1. 书写Dao接口并书写抽象方法。如:UserDao.java
  2. 书写Dao接口实现类,并具体实现方法。如:UserDaoImpl.xml
  3. 将Dao层对象注册到Spring容器。如:(省略属性注入)
  4. 将Dao层对象注入到Service层对象。
  • 这种方式并不难,这里不再做测试,重点学习Mapper接口发开。

 

  • Mapper接口开发:

  • Mapper接口(UserMapper.java)书写:
package hh.mapper;

import hh.pojo.User;

public interface UserMapper {

	public User findUserById(Integer id);
	
}
  • mapper映射文件(UserMapper.xml)书写:






	
	

  • 将映射文件注册到Mybatis配置文件中(因为我在写Mybatis配置文件时已经写了,这里只列出那一段代码):
	
		
		
		
	
  • 将Mapper接口交给Spring容器来管理:
	
	
		
		
		
		
	
  • 测试代码:
@Test
public void testName() throws Exception {
//	这里只写一个简单测试类,所以未采用属性注入的方式,而是手动读取Spring配置文件并创建对象。
	ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
		
	UserMapper mapper = (UserMapper) context.getBean("userMapper");
		
	User user = mapper.findUserById(6);
		
	System.out.println(user);
}
  • 执行结果:
DEBUG [main] - ==>  Preparing: select * from user where id = ? 
DEBUG [main] - ==> Parameters: 6(Integer)
DEBUG [main] - <==      Total: 1
DEBUG [main] - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5ace1ed4]
DEBUG [main] - Returning JDBC Connection to DataSource
User [id=6, name=胡歌, sex=男]

总结:

  1. 书写Mapper接口并写抽象方法。如:UserMapper.java
  2. 书写mapper映射文件并书写sql语句。如:UserMapper.xml
  3. 将映射文件注册到Mybatis配置文件中。
  4. 将Mapper接口注册到Spring容器。
  5. 将接口对象注入到Service层类中。

上面之了一个简单的例子。以上面这种方式,如果在开发中,有N个Mapper接口,就要在Spring容器中注册N个。Mybatis开发组考虑到这点,又进行了优化。那就是包扫描的方式。

 

  • Mapper接口开发之包扫描:

此种方式,与原先的Mapper接口开发的步骤是一样的,只不过在第4、5步的具体实现略有不同。

  • 省略:

  1. 书写Mapper接口并写抽象方法。如:UserMapper.java
  2. 书写mapper映射文件并书写sql语句。如:UserMapper.xml
  3. 将映射文件注册到Mybatis配置文件中。
  • 将Mapper接口注册到Spring容器:此时,是采用指定包的方式。
  • 原方式:
        
	
		
		
		
		
	
  • 包扫描方式:
	
	
		
		
	

可以看到包扫描方式,并没有指定bean的id,所以在创建对象时,不能再根据id创建,而是根据类来创建。如下:

  • 测试代码:
	@Test
	public void testName() throws Exception {
//		这里只写一个简单测试类,所以未采用属性注入的方式,而是手动读取Spring配置文件并创建对象。
		ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//		根据字节码对象来创建对象
		UserMapper mapper = (UserMapper) context.getBean(UserMapper.class);
		
		User user = mapper.findUserById(6);
		
		System.out.println(user);
	}
  • 执行结果:
DEBUG [main] - ==>  Preparing: select * from user where id = ? 
DEBUG [main] - ==> Parameters: 6(Integer)
DEBUG [main] - <==      Total: 1
DEBUG [main] - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2a265ea9]
DEBUG [main] - Returning JDBC Connection to DataSource
User [id=6, name=胡歌, sex=男]

总结:

包扫描方式,简化了配置代码的书写,只要将所有Mapper放在同一包下,配合一次即相当于配置全部。

调用时,要根据字节码来创建对象。

你可能感兴趣的:(框架学习)