<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
MyBatis 直接查詢出的格式是 List 套 Map 的結構,當然利用 Stream 流進行轉換也非常便捷,但如果這樣的操作很多的話,不如利用 MyBatis 提供的 ResultHandler 介面進行實現,做成工具類使用。
此外,如果用 MyBatis 提供的 @MapKey ,也只是對應值有冗餘,因為 MapKey取一個欄位為鍵,取出的所有欄位為值。
/** * 用於MyBatis查詢庫表中兩列對映為鍵值對 */ @Component public class MapResultHandler implements ResultHandler { private final HashMap mapResults = new HashMap<String,String>(); private String key; private String value; @Override public void handleResult(ResultContext resultContext) { HashMap map = (HashMap)resultContext.getResultObject(); mapResults.put(map.get("key"), map.get("value")); } /** * 返回對映 * @return 結果 */ public HashMap getMapResults() { return mapResults; } /** * @param key key * @param value value */ public MapResultHandler(String key, String value) { this.key = key; this.value = value; } /** * 空構造 */ public MapResultHandler() { } }
對應 mapper 查詢介面中,在查詢的方法裡將 ResultHandler 實現類(MapResultHandler)以引數形式傳入。
由於使用實現類拿取裝配好的Map,此處的返回型別為 void 。
/** * 提取<圖片名,建立時間>的Map,對應建立時間進行處理 * @param imageLength 上傳圖片的個數 * @return */ void selectImageNameAndCreatetime(MapResultHandler mapResultHandler, int imageLength);
對應 xml 檔案中,定義返回型別為 map 。
其中注意給我們需要的鍵值取別名,對應別名與 ResultHandler 實現類(MapResultHandler)中定義的相對應,這樣在ResultHandler 實現類(MapResultHandler)中 map.get() 才能取到。
<select id="selectImageNameAndCreatetime" resultType="map"> select name as 'key',time as 'value' from house_pic_info order by id desc limit #{imageLength} </select>
先範例化 ResultHandler 實現類(MapResultHandler),作為引數傳入。
取 Map 時依然從 ResultHandler 實現類(MapResultHandler)中取。
MapResultHandler handler = new MapResultHandler(); housePicInfoMapper.selectImageNameAndCreatetime(handler, length); Map imageMap = handler.getMapResults();
思考:對應 ResultHandler 介面只需實現一個 handleResult 方法,在 MyBatis 中 @MapKey 的實現也應該是有對應實現。
/** * MyBatis 中 DefaultMapResultHandler 實現 * @author Clinton Begin */ public class DefaultMapResultHandler<K, V> implements ResultHandler<V> { private final Map<K, V> mappedResults; private final String mapKey; private final ObjectFactory objectFactory; private final ObjectWrapperFactory objectWrapperFactory; private final ReflectorFactory reflectorFactory; @SuppressWarnings("unchecked") public DefaultMapResultHandler(String mapKey, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory, ReflectorFactory reflectorFactory) { this.objectFactory = objectFactory; this.objectWrapperFactory = objectWrapperFactory; this.reflectorFactory = reflectorFactory; this.mappedResults = objectFactory.create(Map.class); this.mapKey = mapKey; } @Override public void handleResult(ResultContext<? extends V> context) { final V value = context.getResultObject(); final MetaObject mo = MetaObject.forObject(value, objectFactory, objectWrapperFactory, reflectorFactory); // TODO is that assignment always true? final K key = (K) mo.getValue(mapKey); mappedResults.put(key, value); } public Map<K, V> getMappedResults() { return mappedResults; } }
到此這篇關於MyBatis將查詢出的兩列資料裝配成鍵值對的文章就介紹到這了,更多相關MyBatis查詢資料裝配成鍵值對內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45