1. 程式人生 > >mybatis入坑記- resultMap引發的血案

mybatis入坑記- resultMap引發的血案

筆者最近剛剛學習mybatis,然後學習了ResultType和ResultMap,記得書中說稍微複雜的關聯就使用resultMap,還告訴我使用resultMap可以不關注欄位和屬性是否不一樣,

然後我潛意識就喜歡在很多情況下使用ResultMap,不用不知道,一用嚇一跳,由此引發了血案,筆者花了一上午的時間也沒找出來原因,後來還是在老同事的幫助下解決了問題,這裡還是要感謝一下那位老同志,下面就來還原一下血案發生的前後。

筆者正在做一個論壇專案。

這裡要顯示五個資料

main_forum.title,

        post.ptitle,

post.reply_num,
post.view_num,
post.send_date,

後面4個數據都是在一個表中,而第一個資料是在另外的表中,而當前的表和第一個資料所在的表並沒有任何關聯

必須通過中間一個表建立關聯

於是我就在mapper對映中寫下了如下的語句

<resultMap type="com.bbs.beans.Post" id="PostResultMap">
		<id property="id" column="id" />
		<result property="ptitle" column="ptitle" />
		<result property="sendDate" column="send_date" />
		<result property="replyNum" column="reply_num" />
		<result property="viewNum" column="view_num" />
		<association property="subForum" javaType="com.bbs.beans.SubForum">
			<id property="sid" column="sid" />
			<association property="mainForum" javaType="com.bbs.beans.MainForum">
				<id property="mid" column="mid" />
				<result property="title" column="title" />
			</association>
		</association>
	</resultMap>
	<select id="showPost" resultMap="PostResultMap">
		SELECT
		post.ptitle,
		post.reply_num,
		post.view_num,
		post.send_date,
		main_forum.title
		FROM
		post
		left join sub_forum on post.forum=sub_forum.sid
		left join main_forum on sub_forum.main_forum=main_forum.mid
		WHERE
        1=1
	</select>

三表聯查沒毛病,坑爹的是我資料庫中有4條資料,它只是查出來一條資料。

後來改成resultType的方式成功查出4條資料。

<select id="showPost" resultType="Post">
		SELECT
		post.ptitle as "ptitle",
		post.reply_num as "replyNum",
		post.view_num  as "viewNum",
		post.send_date as "sendDate",
		main_forum.title  as "subForum.mainForum.title"
		FROM
		post
		left join sub_forum on post.forum=sub_forum.sid
		left join main_forum on sub_forum.main_forum=main_forum.mid
		WHERE
        1=1
	</select>
跟第一個resultMap語句少了很多而且又是正確結果,筆者深深認識到實踐出真知啊,只怪筆者剛學,被這個書坑慘了。

選擇resultMap要謹慎,最好使用resultType.

相關推薦

mybatis- resultMap引發血案

筆者最近剛剛學習mybatis,然後學習了ResultType和ResultMap,記得書中說稍微複雜的關聯就使用resultMap,還告訴我使用resultMap可以不關注欄位和屬性是否不一樣, 然後我潛意識就喜歡在很多情況下使用ResultMap,不用不知道,一用嚇一

Spring Boot 2 + SiteMesh + Shiro

最近入手一個專案,用的是Spring Boot 1.5 + SiteMesh + Shiro,想趕時髦升級成Spring Boot 2,於是就掉坑裡了。 正常情況從login網頁登入後,頁面轉到index。但是升級完後卻報了一個常見但又很難解決的問題: org.apache.shi

Hadoop

Hadoop入坑記 按照官方給的偽分散式配置 etc/hadoop/core-site.xml: <configuration> <property> <name>fs.defaultFS</name> <value>hdfs:

【神經網路】深度學習和神經網路的區別

入坑神經網路有一段時間,決定寫寫部落格記錄下學到的知識點,哪怕是一點點的內容,以後想看了也有個著落吧。。。 這次梳理的內容是神經網路、深度學習的一個關係 之前雖然看了一些演算法,自己也嘗試著畫了一些葫蘆,不過後來發現對於深度學習和神經網路有些混亂 寫個部落格做下筆記: 在人

《我的Angular》——通過小例子看ng-repeat

        為了簡單方便一點,筆者這裡的資料全部都是在前臺硬加上去的,一般專案裡的資料都是通過後臺抓取的。 <!DOCTYPE html> <html lang="en"> <hea

《我的Angular》——一個使用ng-show的demo

        這個demo的大致思路是這樣的:在登入之前會有一個 接受協議的單選框,只有你選擇了,登入按鈕才可以點選否則無效,還有一個可供檢視協議內容的button,筆者的這個demo主要使用到的是ng-show和ng-di

《我的Angular》——ng-options的使用

        ng-options 指令用於使用 <options> 填充 <select> 元素的選項,當select中一個選項被選擇,該選項將會被繫結到ng-model。 n

《我的Angular》——初識scope物件

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="

gRPC

概要 由於gRPC主要是谷歌開發的,由於一些已知的原因,gRPC跑demo還是不那麼順利的。單獨寫這一篇,主要是gRPC安裝過程中的坑太多了,記錄下來讓大家少走彎路。 主要的坑: 如果使用PHP、Python開發gRPC的客戶端,需要編譯gRPC命令列工具,生成proto的程式碼生成外掛,否則proto裡定

vue2(一)

change 奇怪 變量 ble 全局 ole 獲取 cit push 都說Vue2簡單,上手容易,但小馬過河,自己試了才曉得,除了ES6語法和webpack的配置讓你感到陌生,重要的是思路的變換,以前隨便拿全局變量和修改dom的錘子不能用了,變換到關註數據本身。vue的

vue2(二) -- 自定義動態組件

blank -1 reat files 但是 name define 構建 prototype 學習了Vue全家桶和一些UI基本夠用了,但是用元素的方式使用組件還是不夠靈活,比如我們需要通過js代碼直接調用組件,而不是每次在頁面上通過屬性去控制組件的表現。下面講一下如何定

springboot通過xml集成mybatis實現mysql數據庫操作【探

roc destroy end form表單 account qualifier l數據庫 inpu 資源 這裏主要是介紹在springboot裏面通過xml的方式進行配置,因為xml的配置相對後臺復雜的系統來說,能夠使得系統的配置和邏輯實現分離,避免配置和代碼邏輯過度耦合

2018-7-30B:SpringCloud下mybatis DAO例項化失敗

Field baseDAO in per.wilson.distributed.dao.service.BaseServiceImpl required a bean of type 'per.wilson.distributed.dao.BaseDAO' that could not be

pytorch筆記1: 從ResNet出發引發的幾點思考

終於轉到pytorch的學習了,也算是開啟了一個新的篇章了。 1. 基本的學習資料     網上的學習資料很多, 基本的語法這裡也就不介紹了,推薦幾個個人感覺比較好的文章或者網站。 pytorch官網 pytorch中文網站

vue2(一)-- 初始全家桶

都說Vue2簡單,上手容易,但小馬過河,自己試了才曉得,除了ES6語法和webpack的配置讓你感到陌生,重要的是思路的變換,以前隨便拿全域性變數和修改dom的錘子不能用了,變換到關注資料本身。vue的官方文件還是不錯的,由淺到深,但是當你用vue-cli構建一

MyBatis升級踩

前段時間,偶然發現系統某核心模組使用for迴圈插入資料,遂想進行優化,一次批量插入是個不錯的方案,可能可以提高插入速度,肯定可以節約資料庫連線。系統用ORM框架MyBatis做DAO,考慮用MyBatis自帶批量提交功能實現,so easy對吧,但接下來坑一個接

強力推薦:Atom必備插件

格式化 方便 tom 一個 rip 設置 等等 依靠 同步 強力推薦:Atom入坑必備插件 Atom作為Javascript/CSS/HTML等前端編輯器利器,其強大功能依靠各種插件,以下是筆者在入坑階段,精挑細選總結出的必不可少的插件,熟悉運用這些插件,一定成噸提高生產效

Vue2.0新手環境搭建(一)

clas min 團隊 定義 自定義 ini 創建 https idt 每周不定期更新 專業團隊接APP 外包 聯系QQ1129580542 vue-cli 是一個官方發布 vue.js 項目腳手架,使用 vue-cli 可以快速創建 vue 項目,GitHu

vue2.0組件之間的傳值--新,請指教

fine ext sets mode tro exp ted pro -s prop down emit up 嘿嘿 如果是第一次接觸vue2.0組件傳值的肯定很疑惑,這是什麽意思(大神總結的,我也就是拿來用用) “down”—>指的是下的意思,即父

支付開發填之微信支付

wiki index 傳輸 系統 外網 ttr throw div union 微信支付,支持的支付方式比較多:有掃碼支付,刷卡支付,APP支付和公眾號支付。其中,APP和網站上最常用的就是APP支付和公眾號支付。前者集成在APP中,後者主要是為微信用戶提供了另一種支付方式