『壹』 MyBatis涓瀵瑰氭煡璇㈠強寤惰繜鍔犺澆
鏌ヨ㈡墍鏈夎㈠崟淇℃伅錛屽叧鑱旀煡璇涓嬪崟鐢ㄦ埛淇℃伅銆
涓諱俊鎮錛氳㈠崟淇℃伅
浠庝俊鎮錛氱敤鎴蜂俊鎮
浣跨敤resultMap榪涜岀粨鏋滄槧灝勶紝瀹氫箟涓撻棬鐨剅esultMap鐢ㄤ簬鏄犲皠涓瀵逛竴鏌ヨ㈢粨鏋溿
property:Order瀵硅薄鐨剈ser灞炴с
javaType錛歶ser灞炴у瑰簲 鐨勭被鍨嬨
association錛氳〃紺鴻繘琛屼竴瀵逛竴鍏寵仈鏌ヨ㈡槧灝勩
浣跨敤resultMap榪涜岀粨鏋滄槧灝勬椂錛屽叿浣撴槸浣跨敤association瀹屾垚鍏寵仈鏌ヨ㈢殑鏄犲皠錛屽皢鍏寵仈鏌ヨ淇℃伅鏄犲皠鍒皃ojo瀵硅薄涓銆
鏌ヨ㈡墍鏈夌敤鎴蜂俊鎮鍙婄敤鎴峰叧鑱旂殑璁㈠崟淇℃伅銆
涓諱俊鎮錛氱敤鎴蜂俊鎮
浠庝俊鎮錛氳㈠崟淇℃伅
鍦ㄤ竴瀵瑰氱殑浣跨敤涓錛屽彧鑳戒嬌鐢╮esultMap榪涜岀粨鏋滄槧灝
Collection鏍囩撅細瀹氫箟浜嗕竴瀵瑰氬叧鑱旂殑緇撴灉鏄犲皠銆
property="orders"錛氬叧鑱旀煡璇㈢殑緇撴灉闆嗗瓨鍌ㄥ湪User瀵硅薄鐨勪笂鍝涓灞炴с
ofType="com.demo.mybatis.po.Order"錛氭寚瀹氬叧鑱旀煡璇㈢殑緇撴灉闆嗕腑鐨勫硅薄綾誨瀷鍗矻ist涓鐨勫硅薄綾誨瀷銆傛ゅ勫彲浠ヤ嬌鐢ㄥ埆鍚嶏紝涔熷彲浠ヤ嬌鐢ㄥ叏闄愬畾鍚嶃
MyBatis鏍規嵁鍏寵仈瀵硅薄鏌ヨ㈢殑select鐨勮鍙ョ殑鎵ц屾椂鏈猴紝鍒嗕負涓夌嶇被鍨嬶細 鐩存帴鍔犺澆銆佷鏡鍏ュ紡鍔犺澆鍜屾繁搴﹀歡榪熷姞杞 銆
寤惰繜鍔犺澆絳栫暐闇瑕佸湪Mybatis鐨勫叏灞閰嶇疆鏂囦歡涓錛岄氳繃鏍囩捐繘琛岃劇疆銆
鎵ц屽畬瀵逛富鍔犺澆瀵硅薄鐨剆elect璇鍙ワ紝椹涓婃墽琛屽瑰叧鑱斿硅薄鐨剆elect鏌ヨ銆
鎵ц屽逛富鍔犺澆瀵硅薄鐨剆elect鏌ヨ㈡椂錛屼笉浼氭墽琛屽瑰叧鑱斿硅薄鐨勬煡璇銆備絾褰撹佽塊棶涓誨姞杞藉硅薄鐨勬煇涓灞炴э紙璇ュ睘鎬т笉鏄鍏寵仈瀵硅薄鐨勫睘鎬э級鏃訛紝灝變細椹涓婃墽琛屽叧鑱斿硅薄鐨剆elect鏌ヨ銆
鎵ц屽逛富鍔犺澆瀵硅薄鐨剆elect鏌ヨ㈡椂錛屼笉浼氭墽琛屽瑰叧鑱斿硅薄鐨勬煡璇銆傚綋瑕佽塊棶涓誨姞杞藉硅薄鐨勮︽儏鏃朵篃涓嶄細鎵ц屽瑰叧鑱斿硅薄鐨勬煡璇銆傚綋璁塊棶鍒板叧鑱斿硅薄鐨勮︽儏鏃舵墠鎵ц屽瑰叧鑱斿硅薄鐨勬煡璇銆
『貳』 mybatis怎麼查詢表中所有數據
SELECT *
FROM aa
<if test="NUM != null">
FETCH FIRST ${NUM} ROWS ONLY
這樣就可以了,我在項目也這樣處理的
『叄』 mybatis大數據查詢優化:fetchSize
這兩天做到一個需求,需要一次性將一張數據表裡的所有資源數據中的位置信息錄入到redis中,表中的數據有幾百萬起步,採用的是java定時任務,循環每次查出一萬條數據存入redis,測試時發現插入效率非常慢,經過排查發現是通過mybatis查詢數據的耗時超過了總耗時的99%,我這台機器上是每查詢一萬條數據返回耗時87s左右。
解決方法:
在mapper.xml中的<select>中加入fetchSize參數,設置的大一些,如下:
我也是第一次用這個參數,這效果,感覺非常神奇!
簡單參數解析:
通過JDBC取數據時,默認是10條數據取一次,即fetch size為10(根據oracle的文檔,默認的fetchSize是10),如果增大這個數字可以減少客戶端與oracle的往返,減少響應時間,網上有建議這個數字不要超過100,要不然對中間件內存消耗大。
雖然說超過100不好,但是我設置了10000,結果看我的破電腦還是扛得住的,但是本著專研精神,我將fatch size設置為1000,看看效果會不會打折扣,結果用時如下:
總結:
在使用mybatis一次查詢大量數據時確實可以通過怎大fatchSize的值來大大提高查詢效率,使用也非常簡單,具體fatchSize設為多少要根據自己具體的業務需要和機器的配置來綜合判定。
待解決問題
以上方式在xml中可以輕松設置,但是使用mybatis-plus的簡單查詢時並不用手動寫xml查詢,我也不知道如何定製其fatchSize的值,我目前的解決方式是手動在xml中再寫一個查詢方法來調用,但是感覺這樣做非常的麻煩,如果你知道如何在調用mybatis-plus的BaseMapper查詢方法時配置fatchSize,請留言告知,十分感謝!