MyBatis Mapper.xml中的命名空间及命名方式

 更新时间:2021年09月30日 09:58:57   作者:姜小衰  
这篇文章主要介绍了MyBatis Mapper.xml中的命名空间及命名方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Mapper.xml相关使用

命名空间(Namespaces)

命名空间(Namespaces) 在之前版本的MyBatis中是可选的,这样容易引起混淆因此毫无益处。现在命名空间则是必须的,且易于简单地用更长的完完全限定名来隔离语句。

命名空间使得你所见到的接口绑定成为可能,尽管你觉得这些东西未必用得上,你还是应该遵循这里的规定以防哪天你改变了主意。

出于长远考虑,使用命名空间,并将它置于合适的Java包命名空间之下,你将拥有一份更加整洁的代码并提高了MyBatis的可用性

com/jianglei/example/bean/UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper>

    <select id="findById" resultType="User" parameterType="String">
        SELECT * FROM user_test where id = #{id}
    </select>

</mapper>

则启动时则会抛出

org.apache.ibatis.builder.BuilderException: Mapper's namespace cannot be empty异常

命名解析

命名解析: 为了减少输入量,MyBatis对所有的命名配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则。

  • 完全限定名(比如"com.mypackage.MyMapper.selectAllThings")将被直接查找并且找到即用。
  • 短名称(比如"selectAllThings")如果全局唯一也可以作为一个单独的引用。如果不唯一,有两个或两个以上的相同名称(比如“com.foo.selectAllThings ”和“com.bar.selectAllThings”), 那么使用时就会收到错误报告说短名称是不唯一的,这种情况下就必须使用完全限定名。

如果使用短名称,且不唯一则会抛出以下异常

com/jianglei/example/bean/UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.jianglei.example.bean.UserMapper">
    <select id="findById" resultType="User" parameterType="String">
        SELECT * FROM user_test where id = #{id}
    </select>
</mapper>

com/jianglei/example/bean/UserMapper2.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jianglei.example.bean.UserMapper2">

    <select id="findById" resultType="User" parameterType="String">
        SELECT * FROM user_test where id = #{id}
    </select>

</mapper>

以下代码则会抛出

java.lang.IllegalArgumentException: findById is ambiguous in Mapped Statements collection (try using the full name including the namespace, or rename one of the entries)异常

    @Test
    public void testNamespace02() {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            User user = session.selectOne("findById", "1");
            System.out.println("---------------------");
            System.out.println(user);
        }finally {
            session.close();
        }
    }

MyBatis中mapper.xml命名空间错误

项目场景

使用mybatis配置完成基本的增加操作

问题描述

运行测试添加方法的时候报错:

Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Wrong namespace. Expected ‘com.lwy.mapper.CarMapper' but found ‘com.lwy.pojo.Car'.

原因分析

进行翻译了一下,可以粗略的知道命名空间错了

在这里插入图片描述

解决方案

修改命名空间,找到mapper的xml文件修改名称空间

修改前:我用的是实体类

在这里插入图片描述

修改后mapper接口类

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot实现连接nacos并支持多环境部署

    SpringBoot实现连接nacos并支持多环境部署

    这篇文章主要介绍了SpringBoot实现连接nacos并支持多环境部署方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java代码中与Lua相互调用实现详解

    Java代码中与Lua相互调用实现详解

    这篇文章主要为大家介绍了Java代码中与Lua相互调用实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Spring系列之事物管理

    Spring系列之事物管理

    这篇文章主要介绍了Spring系列之事物管理,文中通过示例代码介绍的非常详细,对大家学习或者使用spring方面知识具有一定的参考学习价值,需要的朋友们一起学习学习吧
    2021-09-09
  • 三级联动省市ajax的代码

    三级联动省市ajax的代码

    这篇文章主要为大家详细介绍了ajax实现省市三级联动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助
    2021-07-07
  • Maven中错误使用parent.relativePath导致构建失败问题

    Maven中错误使用parent.relativePath导致构建失败问题

    这篇文章主要介绍了Maven中错误使用parent.relativePath导致构建失败问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • java后端合成图片的实现示例

    java后端合成图片的实现示例

    本文主要介绍了java后端合成图片的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 如何解决websocket开启多个页面访问同一个连接会失效的问题

    如何解决websocket开启多个页面访问同一个连接会失效的问题

    使用WebSocket时,若多个页面访问同一个WebSocket连接可能会导致连接失效,遇到这个问题时,可以通过在SpringBoot中使用@ServerEndpoint注解并添加@Component来解决,出现连接错误通常是因为WebSocket连接接收到的是一个GET请求
    2024-09-09
  • spring boot2.0总结介绍

    spring boot2.0总结介绍

    今天小编就为大家分享一篇关于spring boot2.0总结介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java 由浅入深带你掌握图的遍历

    Java 由浅入深带你掌握图的遍历

    图的遍历是指,从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历。遍历过程中得到的顶点序列称为图遍历序列
    2022-03-03
  • 深入浅出理解Java Lambda表达式之四大核心函数式的用法与范例

    深入浅出理解Java Lambda表达式之四大核心函数式的用法与范例

    Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑,今天小编带你理解Lambda表达式之四大核心函数式的用法,感兴趣的朋友快来看看吧
    2021-11-11

最新评论