【Mybatis面试高频】- mybatis的id能否重复,命名空间能否重复,命名空间的id能否重复?
要解释该问题,从另外一个问题来理解MyBatis不同映射文件中的id是否可以重复?
可以重复,但是需要映射文件的
namespace
不同;不同的XML映射文件,如果配置了
namespace
, 那么id
可以重复;如果没有配置namespace
, 那么id
不能重复;原因就是
namespace
+id
是作为Map<String,MapperStatement>
的key使用的,如果没有namespace
, 就剩下id
. 那么id
重复会导致数据互相覆盖;有了
namespace
,自然id
就可以重复,namespace
不同,namespace
+id
自然也就不同了。
那这个问题的答案就是:
当我们有两个或者两个以上相同的id的时候,就必须使用namespace进行区分,如果只有mapper.xml文件,那么namespace写什么都可以,在使用的时候,只需要sqlSession.insert("insertStudent",student);
就可以了,如果我们的id是相同,那我们就需要使用:sqlSession.insert("mapper1.insertStudent",student);
在前面加上namespace。否则就会出现以下错误,提示我们使用全称包括namespace,或者重新定义一个id。
总的来说,要么id不一样,可以直接用,要么id一样,但是namespace不一样,使用的时候加上namespace区分。