Could not find result map com.itheima.domain.User

在学习MyBatis时遇到了数据库查询错误,详细表现为`IncompleteElementException`,提示找不到`com.itheima.domain.User`的结果映射。错误的根本原因是配置文件中将`resultType`误写为了`resultMap`。`resultType`与`resultMap`虽然都映射到User对象,但`resultType`对列名与属性名匹配敏感,而`resultMap`允许自定义映射且支持类型处理器。修复方案是将`resultMap`正确地改为`resultType`。

项目场景:

学习mybatis,配置完核心配置文件和映射文件,进行数据库连接测试


问题描述:

org.apache.ibatis.exceptions.PersistenceException:

Error querying database. Cause: org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.itheima.domain.User

Cause: org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.itheima.domain.User

@Test
    public void test1() throws IOException {
        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作 参数:namespace+id
        List<User> userList = sqlSession.selectList("userMapper.findAll");
        //打印数据
        System.out.println(userList);
        //释放资源
        sqlSession.close();
    }

在这里插入图片描述


原因分析:

配置文件写错了,resultType写成了resultMap
resultType和resultMap区别:
相同点:resultType和resultMap都映射到了User对象中

不同点:

1.resultType对应的是java对象中的属性,大小写不敏感,

2.resultType如果放的是java.lang.Map,key是查询语句的列名,value是查询的值,大小写敏感

3.resultMap:指的是定义好了的id的,是定义好的resyltType的引用

注意:用resultType的时候,要保证结果集的列名与java对象的属性相同,而resultMap则不用,而且resultMap可以用typeHander转换

4.type:java 对象对应的类,id:在本文件要唯一column :数据库的列名或别名,property:对应java对象的属性,jdbcType:java.sql.Types

查询语句中,resultMap属性指向上面那个属性的标签的id

parameterType:参数类型,只能传一个参数,如果有多个参数要封装,如封装成一个类,要写包名加类名,基本数据类型则可以省略

5.一对1、一对多时,若有表的字段相同必须写别名,不然查询结果无法正常映射,出现某属性为空或者返回的结果与想象中的不同,而这往往是没有报错的。
在这里插入图片描述


解决方案:

resultMap改成resultType
在这里插入图片描述
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值