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接口类
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Cloud Gateway打造可扩展的微服务网关
微服务网关是一个位于客户端和后端微服务之间的服务器,用于处理所有与客户端的通信,Spring Cloud Gateway都是一个值得考虑的选择,它将帮助您更好地管理和保护您的微服务,感兴趣的朋友一起看看吧2023-11-11Java异常处理之try...catch...finally详解
今天小编就为大家分享一篇关于Java异常处理之try...catch...finally详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-01-01解决springboot没有启动标识,启动类也没有启动标识的问题
这篇文章主要介绍了解决springboot没有启动标识,启动类也没有启动标识的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01Java中this和super的区别及this能否调用到父类使用
这篇文章主要介绍了Java中this和super的区别及this能否调用到父类使用,this和super都是Java中常见的关键字,下文关于两者区别介绍,需要的小伙伴可以参考一下2022-05-05浅析Java中SimpleDateFormat为什么是线程不安全的
SimpleDateFormat是Java中用于日期时间格式化的一个类,它提供了对日期的解析和格式化能力,本文主要来和大家一起探讨一下SimpleDateFormat为什么是线程不安全的,感兴趣的可以了解下2024-02-02
最新评论