Mybatis【2】-- 多個mapper文件以及namespace作用


pexels-johannes-plenio-1435075

多個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:

此文章僅代表自己(本菜鳥)學習積累記錄,或者學習筆記,如有侵權,請聯系作者刪除。人無完人,文章也一樣,文筆稚嫩,在下不才,勿噴,如果有錯誤之處,還望指出,感激不盡~

技術之路不在一時,山高水長,縱使緩慢,馳而不息。
公眾號:秦懷雜貨店


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM