Mybatis中接口和对应的mapper文件不同目录的配置解决

最近在学习mybatis的一二级缓存时,根据网上视频使用select查询语句操作遇到的一些问题,我是单独用mybaits(版本3.5.1)的测试时(没有和spring集成),遇到如下报错:

 Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for  你的项目中mapper的接口方法。报错的意思是说在mapper.xml中没有找到mapper接口中的方法。

通过在网上寻找解决方法时,根据踩坑经历总结的方法如下:

(1)mapper的xml文件中是否配置了namespace,配置是否正确(需要写到类名),同时保证mapper.java和mapper.xml的文件名相同。如我的项目中使用如截图。

Mybatis中接口和对应的mapper文件不同目录的配置解决_第1张图片

(2)mapper.xml文件中方法的id与mapper接口文件中的方法名一致,方法名不能重复。

(3)mapper.xml文件方法的resultType,resultMap等参数配置是否正确。

Mybatis中接口和对应的mapper文件不同目录的配置解决_第2张图片

Mybatis中接口和对应的mapper文件不同目录的配置解决_第3张图片

(4)在项目中创建mapper接口和mapper.xml的文件是否在同一目录。因为两者文件在同一目录和不同目录的配置是有差异的。我就是在这问题上找了好久的blog才解决。

如果两者文件在同一目录,mybatis配置文件如下:




	
    
        
		
	
	
    
        
    
    
    
        
            
                        
            
                
                
                
                
            
        
    
    
    
    	
        
    
    

我的项目的结构如下:

Mybatis中接口和对应的mapper文件不同目录的配置解决_第4张图片

如果你的mapper接口和mapper.xml的文件不在同一目录,mybatis配置文件如下:




	
    
    
		
	
	
    
        
    
    
    
        
            
                        
            
                
                
                
                
            
        
    
    
    
    	
        
    
    

我的项目的结构如下:

Mybatis中接口和对应的mapper文件不同目录的配置解决_第5张图片

如果mapper.xml文件在src/main/java目录下,由于maven默认在此目录下不打包xml文件,所以在pom.xml中要配置如下代码:


  
    
    
		src/main/java
		
			**/*.xml					
		
		false
	
  

我的测试类代码:

package com.tfq.springaop;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.tfq.springaop.controller.CarController;
import com.tfq.springaop.entity.User;

/**
 *
 * @description 测试mybatis的一二级缓存demo
 * @author tangfq;
 * @version 2020年6月20日 下午12:05:48
 *
 **/

public class TestMybatis {

	private static Logger logger = LoggerFactory.getLogger(TestMybatis.class);
	
	@Test
	public void test() throws IOException {
		InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
				.build(inputStream);
		SqlSession sqlSession=sqlSessionFactory.openSession();
		User u1=sqlSession.selectOne("com.tfq.springaop.dao.UserMapper.getById",1);
		logger.info("打印对象u1,{}",u1);
		System.out.println("打印对象u1="+u1);
		User u2=sqlSession.selectOne("com.tfq.springaop.dao.UserMapper.getById",1);
		logger.info("打印对象u2,{}",u2);
		System.out.println("打印对象u2="+u2);
		
	}

}

执行结果如下:

Mybatis中接口和对应的mapper文件不同目录的配置解决_第6张图片

以上为单独使用mybatis的总结。如果写得有纰漏之处,请大家留言指正。

 

 

你可能感兴趣的:(Mybatis)