多個mapper文件以及namespace作用
要是多個mapper文件的時候怎么處理,namespace又是干什么用的呢
首先我們來看創建數據庫語句:
#創建數據庫
CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
#創建數據表
CREATE TABLE `student` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(20) NOT NULL ,
`age` INT NOT NULL , `score` DOUBLE NOT NULL , PRIMARY KEY (`id`)) ENGINE = MyISAM;
在這里我們必須重新說一下Mybatis的運行大概過程:首先我們通過Resources.getResourceAsStream("mybatis.xml")
讀取到mybatis.xml
這個文件,這個文件里面配置的都是整個項目與數據庫相關的配置,比如運行的時候的數據庫環境(連接哪一個數據庫,數據庫服務器的地址,用戶名,密碼),或者是配置外部配置文件等,最重要的是,這個文件注冊了映射文件(mapper文件),那么我們使用SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
的時候,sqlSessionFactory
回去讀取mybatis.xml
里面讀取的配置文件,並且會逐一獲取每一個配置文件讀取到的Mapper
映射文件,當我們使用openSession()
獲取到sqlSession
的實例的時候,比如我們使用sqlSession.insert("insertStudent",student);
,就會去查找每一個mapper里面的sql配置語句,也就是類似於下面這種:
<mapper namespace="mapper1">
<insert id="insertStudent" parameterType="bean.Student">
insert into student(name,age,score) values(#{name},#{age},#{score})
</insert>
</mapper>
找到id
一樣的就可以,那么很多人會說,既然區分使用的是id
,那我的mapper文件里面的namespace屬性是干什么用的?
當我們有兩個或者以上相同的
id
的時候,我們必須使用namespace進行區分,如果只有一個mapper.xml
文件,那么我們namespace
寫什么都可以,在使用的時候,只需要:sqlSession.insert("insertStudent",student);
就可以了,如果我們的id是相同的,那我們需要使用:sqlSession.insert("mapper1.insertStudent",student);
在前面加上namspace
。否則會出現以下錯誤,提示我們使用全稱包括namespace
,或者重新定義一個id
。
總的來說,要么id
不一樣,可以直接用,要么id
一樣,但是namespace
不一樣,使用的時候加上namespace
區分。否則會報以下錯誤:
多個mapper文件,在在mybatis.xml文件里面需要注冊兩個文件:
<!-- 注冊映射文件 -->
<mappers>
<mapper resource="mapper/mapper1.xml"/>
<mapper resource="mapper/mapper2.xml"/>
</mappers>
使用時候加上namespace:
此文章僅代表自己(本菜鳥)學習積累記錄,或者學習筆記,如有侵權,請聯系作者刪除。人無完人,文章也一樣,文筆稚嫩,在下不才,勿噴,如果有錯誤之處,還望指出,感激不盡~
技術之路不在一時,山高水長,縱使緩慢,馳而不息。
公眾號:秦懷雜貨店