(五)mybatis学习之mapper代理开发方式及与spring整合

mapper代理开发方式

配置文件

使用之前的user.xml
sqlMapConfig.xml中也已经配置加载了user.xml

创建接口类

编写mapper接口的时候,需要遵循一些开发规范,mybatis就可以自动生成mapper接口实现类代理对象。
开发规范如下:
(1)在mapper.xml中的namespace的值等于mapper的接口地址
(2)mapper.java接口中的方法名和mapper.xml中sql配置的id值一致
(3)mapper.java接口中的方法输入参数类型和mapper.xml中sql配置中的parameterType指定类型一致
(4)mapper.java接口中的方法返回值类型和mapper.xml中sql配置中的resultType指定类型一致

public interface UserMapper {

	
	//根据id查询用户信息
	public User findUserById(String id) throws Exception;

	//添加用户信息
	public void addUser(User user) throws Exception;
	
	//根据Id删除用户信息
	public void deleteUserById(String id) throws Exception;
}

代码测试

public class UserMapperTest {
	
	private SqlSessionFactory sqlSessionFactory;
	
	@Before
	public void setUp() throws IOException{
		//创建SqlSessionFactory
		String resource = "sqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		//创建会话工厂
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		
	}

	@Test
	public void testFindUserById() throws Exception {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//获取UserMapper代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		
		User user = userMapper.findUserById("4028818f47e229d70147e2742f1b0005");
	
		System.out.println(user);
		
		sqlSession.close();
	}

}

(五)mybatis学习之mapper代理开发方式及与spring整合_第1张图片


mapper代理开发方式及与spring的整合

mybatis配置文件

sqlMapConfig.xml





	
	
		
		
		
	
	

映射文件(userMaper.xml)


把之前的user.xml重命名为userMapper.xml
注:一直说mapper代理开发时,接口文件名要与配置文件名一致,但是目前我测试的时候,发现接口名称是UserMapper.java,而配置文件为UserMapper.xml或者userMapper.xml,程序运行都没问题。如果配置文件名改为user.xml,则程序运行不成功。

添加依赖包

在之前的项目基础上还需要加入spring的依赖包 、mybatis和spring的整合包
最终的pom.xml内容如下:
[html]  view plain  copy
  1. <dependencies>  
  2.    
  3.       
  4. <dependency>  
  5.     <groupId>javax.servletgroupId>  
  6.     <artifactId>javax.servlet-apiartifactId>  
  7.     <version>3.1.0version>  
  8. dependency>      
  9.   
  10.       
  11. <dependency>  
  12.     <groupId>org.mybatisgroupId>  
  13.     <artifactId>mybatisartifactId>  
  14.     <version>3.3.1version>  
  15. dependency>  
  16.   
  17.   
  18. <dependency>  
  19.     <groupId>mysqlgroupId>  
  20.     <artifactId>mysql-connector-javaartifactId>  
  21.     <version>5.1.38version>  
  22. dependency>  
  23.   
  24.   
  25. <dependency>  
  26.     <groupId>org.slf4jgroupId>  
  27.     <artifactId>slf4j-log4j12artifactId>  
  28.     <version>1.7.20version>  
  29. dependency>  
  30. <dependency>  
  31.     <groupId>log4jgroupId>  
  32.     <artifactId>log4jartifactId>  
  33.     <version>1.2.17version>  
  34. dependency>  
  35.    
  36.       
  37.    <dependency>  
  38.      <groupId>junitgroupId>  
  39.      <artifactId>junitartifactId>  
  40.      <version>3.8.1version>  
  41.      <scope>testscope>  
  42.    dependency>  
  43.      
  44.      
  45.    <dependency>  
  46.     <groupId>org.springframeworkgroupId>  
  47.     <artifactId>spring-coreartifactId>  
  48.     <version>4.2.1.RELEASEversion>  
  49. dependency>  
  50. <dependency>  
  51.     <groupId>org.springframeworkgroupId>  
  52.     <artifactId>spring-txartifactId>  
  53.     <version>4.2.1.RELEASEversion>  
  54. dependency>  
  55. <dependency>  
  56.     <groupId>org.springframeworkgroupId>  
  57.     <artifactId>spring-contextartifactId>  
  58.     <version>4.2.1.RELEASEversion>  
  59. dependency>  
  60. <dependency>  
  61.     <groupId>org.springframeworkgroupId>  
  62.     <artifactId>spring-beansartifactId>  
  63.     <version>4.2.1.RELEASEversion>  
  64. dependency>  
  65. <dependency>  
  66.     <groupId>org.springframeworkgroupId>  
  67.     <artifactId>spring-jdbcartifactId>  
  68.     <version>4.2.1.RELEASEversion>  
  69. dependency>  
  70.   
  71.   
  72. <dependency>  
  73.     <groupId>com.mchangegroupId>  
  74.     <artifactId>c3p0artifactId>  
  75.     <version>0.9.5.2version>  
  76. dependency>  
  77.       
  78.   
  79.   
  80. <dependency>  
  81.     <groupId>org.mybatisgroupId>  
  82.     <artifactId>mybatis-springartifactId>  
  83.     <version>1.2.4version>  
  84. dependency>  
  85.       
  86.       
  87.      
  88.  dependencies>  

spring配置文件applicationContext.xml




	
   
        
		
		
		
        
        
        
        
        
        
        
        
        
        
        
     
	
	
	
		
		
		
		
	
	
	
	
		
		
		
	
	


mapper接口

package mapper;

import pojo.User;

public interface UserMapper {

	
	//根据id查询用户信息
	public User findUserById(String id) throws Exception;

	//添加用户信息
	public void insertUser(User user) throws Exception;
		
	//根据Id删除用户信息
	public void deleteUserById(String id) throws Exception;
}

测试

package mybatis;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import mapper.UserMapper;
import pojo.User;

public class UserMapperTest {
	
	private ApplicationContext context;

	@Before
	public void setUp() throws Exception {
		context = new ClassPathXmlApplicationContext("classpath:ApplicationContext.xml");
	}

	@Test
	public void testFindUserById() throws Exception {
		
		//获取代理对象
		UserMapper userMapper = (UserMapper) context.getBean("userMapper");
		
		User user = userMapper.findUserById("402881bc492d83bb01492d8630ad0000");
		
		System.out.println(user);
		
		
	}

}



MapperScannerConfigurer进行mapper的包扫描

上面的测试中,我们在spring容器里中通过


	
		
		
		
	
这个配置去生成一个userMaper代理对象。如果有N个mapper接口,那么根据这种方法,就需要在spring配置文件里配置N个org.mybatis.spring.mapper.MapperFactoryBean

这是非常不方便的。所以我们采用org.mybatis.spring.mapper.MapperScannerConfigurer进行mapper的扫描。


	
		
		
		
		
		
		
	

此时sqlMapConfig.xml的内容为:





	

测试OK。

最后的spring配置文件ApplicationContent.xml的内容为:




	
   
        
		
		
		
        
        
        
        
        
        
        
        
        
        
        
     
	
	
	
		

		
		
		
		
		
	
	
	
	
	
	
		
		
		
		
		
		
	
	
	







你可能感兴趣的:(mybatis)