『壹』 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,请留言告知,十分感谢!