[MyBatis] Mapper.xml中的命名空间及命名解析_姜小衰的博客-程序员秘密

技术标签: MyBatis  Mybatis  

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();
        }
    }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36210698/article/details/82992771

智能推荐

剑指 Offer 44. 数字序列中某一位的数字 - 力扣(LeetCode)_Onwaier的博客-程序员秘密

剑指 Offer 44. 数字序列中某一位的数字 - 力扣(LeetCode)

SourceTree这是一个无效源路径/URL_sourcetree无效的源路径_日常搬砖的程序猿的博客-程序员秘密

SourceTree这是一个无效源路径/URL。解决办法:安装sourcetree的前提,需要本地安装git。然后打开sourcetree—》点击上方工具—》点击选项—》点击git—》启用git

变量的作用域(局部变量与全局变量)_半日闲12138的博客-程序员秘密

'''num = 0def fy(): global num num = 10fy()print(num)''''''变量的作用域变量都有自己的生命周期,变量只能在自己所属的区域内使用'''# 局部变量 定义在函数内部的变量,只能函数自己使用,外部#不能使用'''def fy(): a = 11 #函数内部 print(a) #函...

时间序列分析——如何正确使用单位根检验(ADF)?_adf检验怎么操作_Halosec_Wei的博客-程序员秘密

1、作用在使用很多时间序列模型的时候,如 ARMA、ARIMA,都会要求时间序列是平稳的,所以一般在研究一段时间序列的时候,第一步都需要进行平稳性检验,除了用肉眼检测的方法,另外比较常用的严格的统计检验方法就是ADF检验,也叫做单位根检验。单位根检验是指检验序列中是否存在单位根,因为存在单位根就是非平稳时间序列了。2、输入输出描述输入:1个时间序列数据定量变量输出:序列数据在几阶差分时达到平稳3、学习网站SPSSPRO-免费专业的在线数据分析平台4、案例示例案例:基于某杂志199

matlab练习程序(图像傅里叶变换,幅度谱,相位谱)_weixin_33985679的博客-程序员秘密

cl;img=imread('15.bmp');%img=double(img);f=fft2(img); %傅里叶变换f=fftshift(f); %使图像对称r=real(f); %图像频域实部i=imag(f); %图像频域虚部margin=log(abs(f)); %图像幅度谱,加log便于显示phase=log(a...

2018四川计算机二本录取,2018年四川省高考二本院校投档线_吕桂华的博客-程序员秘密

2018年四川省高考已经结束,很多考生和家长也开始关注投档线,院校投档分数线是指以院校为单位,按招生院校同一科类招生计划数的一定比例,在对第一志愿投档过程中自然形成的院校调档最低成绩标准。每一所院校都有自己的投档分数线,简称投档线也称调档线或提档线。高三网小编为各位考生和家长整理《2018年四川省高考二本院校投档线》,仅供参考。2018年四川省高考二本院校投档线四川农业大学在川二本投档线:文科54...

随便推点

ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn‘t want to study (线段树+思维)__-Y-_-Y-_的博客-程序员秘密

Ryuji doesn’t want to study这个题挺有意思的两棵线段树一棵维护的是数组另一棵维护的是数组每一项乘以它的倒着的位数如下图:一棵维护的是矩形另一颗维护的是大的三角形AC code/*Ryuji doesn't want to studyACM-ICPC 2018 徐州赛区网络预赛 H.https://nanti.jisuanke.com/t/A200...

嵌入式 串口下载内核和文件系统到开发板_skdkjzz的博客-程序员秘密

本人中午的时候发帖子询问网口不通的情况下怎样下载内核和文件系统,到现在也没人回应,还好经过一个下午的摸索,问题终于解决了,煎熬,串口下载一个10M的文件系统,居然2个多小时,周立功给的串口工具下的快,经测试丢包,所以只能用超级终端来实现网口不通的情况下下载内核和文件系统。1:打开XP下的超级终端2:启动u-boot如下:u-boot#_3:load 0x80008000(loadaddr

如何设置VS2008 辅助编译代码提示相关函数以及相关函数的参数_vs2008代码提示功能设置_松子茶的博客-程序员秘密

当我们在编写程序时,输入某一个函数前面几个字母,相应的弹出一相关函数以及相关函数的参数.以Visual Studio 2008(English)为准,步骤如下: 1. 打开"Microsoft Visual Studio 2008" 2.在Visual Studio 2008 界面。“菜单栏”选择“Tools - >Options... ->Environment”如图所示

Unity3D 数学知识 (向量,坐标系转换,欧拉角,四元数)_unity 开方_虎冯河的博客-程序员秘密

模:向量的长度=&gt;sqr(x^2+y^2+z^2) //各向量的平方相加,在开方Unity API: Vector.magnitude单位向量:长度为1的向量叫单位向量(1,1,1) //各个分量分别除以magnitude模长就等于单位向量公式: Vector v1= new Vector(2,2,3);v1= new Vector(v1.x/v1.magnitude,v1.y/v1.magnitude,v1.z/v1.magnitude); //单位化向量之...

redis数据库包含什么?基本架构_redis基本架构_搞数学的小混混的博客-程序员秘密

redis数据库包含什么??废话宏观感可以存什么数据?废话redis是不是超级快,是不是?为啥啊?为啥这么快哦,我也不知道,是不是缓存?是不是因为是基于内存的?好像有点道理,学了这么久redis啥都不是啥都不会啊!!!!救命!!!!!!宏观感构建redis时首先考虑到的应该时存什么样的数据。然后怎么操作数据,也就是数据模型和操作接口。了解了数据模型你就会知道为什么关系型数据库可以存的一些复杂数据也可以用redis这样的K,V存储了。但是啊 如果你只知道数据模型不知道操作接口的话,可能就没法理解

python安装sklearn库失败解决方法_sklearn安装失败_Nifan_的博客-程序员秘密

1、下载numpy,scipy,matplotlib,scikit-learn本地包(看准python对应版本)2、运行cmd进入python安装目录下的Scripts文件夹下安装这几个包(按顺序安装)

推荐文章

热门文章

相关标签