1. 程式人生 > >mybatis精講(五)--對映器元件

mybatis精講(五)--對映器元件

目錄

  • 前言
  • 標籤
    • select
    • insert|update|delete
  • 引數
  • resultMap
  • cache
    • 自定義快取
  • # 加入戰隊
    • 微信公眾號

前言

  • 對映器之前我們已經提到了,是mybatis特有的元件: java+xml組合的方式。對於Java類和xml的編寫也很簡單。值得注意的是需要將Java編寫的mapper註冊到mybatis中來。之前的註冊的方式通過xml。到後續通過spirng來管理通過@Mapper就很方便了。

標籤

  • Java實現的介面Mapper很簡單,就是已介面的形式暴露,方法和引數和我們正常的寫一樣,就是在多引數的時候我們需要通過@Param註解標註在sql中的變數名。
    • 但是xml就需要按照mybatis的格式來寫了。xml中有select、insert、update、delete等對應方法的標籤。除了這些還有sql、resultMap、

select

  • 嚴格來說,select及下面的insert這些都有一個id,這些id形成JavaMapper中對應的方法。mybatis也是通過id來定位到要執行的sql的。我們通過parameterType、resultType定義入參和出參的型別。Type也可以事先定義為對應的Map 即 parameterMap、resultMap。 在select標籤中還有一個flushCache用來表示是否清楚快取在查詢。因為mybatis預設對SESSION級別開啟一級快取。還有之前提到的fetchSize獲取記錄的條數。常見的就這些屬性。還有其他屬性感興趣的可以深入

  • 在入參出參的時候我們可以使用別名來制定型別。這就是別名帶來的好處。不需要寫一大長串的包名類名。

  • 在第一張我們就提到mybatis和Hibernate的區別是前者是半自動後者是全自動。半自動對映是因為mybatis在列明和屬性名相同的時候自動對映,剩下的就需要我們sql別名了。mybatis還提供一種列名轉駝峰對映的方式也是經常使用的。

  • select中經常會用到resultMap, resultMap這個標籤用途可以說是跟大。首先定義Javabean屬性和資料庫列的對映。對映包括一對一,一對多,還有根據情況選擇器這三種特殊標籤。初次之外在列與屬性對映時候還可以指定TypeHandler來進行覆蓋。有機會好好總結一下這個resultMap。

insert|update|delete

  • 這些標籤實際上和select標籤一樣。屬性上也都是差不多。不同的是select有結果集。而這三個標籤返回的就是記錄數。並不注重他們的返回,更加註重的是他們的入參的執行。經常在他們裡面會有foreach這些用來批量操作。

  • 在新增的時候mybatis提供selectKey標籤來實現主鍵自增長策略,也可以實現自定義主鍵增長策略。這裡的增長並不是數字層面的增長,而是不同的意思。

引數

  • 在傳參的方式有很多種,我們可以選擇map ,也可以選擇javabean,也可以多參傳遞。多參傳遞的時候我們需要新增@Param註解標註屬性名。根據實際情況自行選取哪種方式。

  • 上面提到resultMap可以指定typeHandler,實際上在引數上我們也可以。#{name,javaType=double,jdvbType=NUMERIC,typeHandler=MyTypeHandler}

  • #{name} 這種方式mybatis會自動根據資料格式進行對映,但是當name為null,mybatis就無法對映,這個時候我們#{name,jdbcType=VARCHAR}。mybatis就會採用StringTypeHandler去解析

  • 還有就是# ,$ 的區別。這裡不多說,前者是佔位,後者是拼接

resultMap

  • resultMap是最複雜的一個標籤,他的功能可以實現欄位的對映、級聯的查詢、定製型別轉換器。resultMap目前只能用在select標籤中。新增沒有。

```xml










                                ```
                                
                                ## 級聯
                                
                                  - 級聯在我們平時開發中是最常見的。我們通過pojo接收返回結果的時候我們經常需要處理的就是級聯的問題。在上面的resultMap中通過association、collection來負責一對一。一對多的處理。具體的級聯在我之前的文章中都有的。大家可以關注我檢視。

cache

  • 快取是為了提高執行效率產生的一個功能。主要就是講資料儲存 在記憶體中。因為cpu讀取記憶體是非常的快的。所以快取能夠提高我們的效率。之前我們已經提過了,mybatis為我們提供兩種快取。一級快取和二級快取。一級快取預設是開啟的。他的生命週期是SESSION。就是說在同一個sqlsession中相同的查詢是經過快取的。這個快取如果沒有在insert或者select其他標籤內沒有flush快取的話,這個快取在規定時間內就會一直存在。換句話說同樣的sql將會一直查詢快取。上述情況僅僅是針對相同的sqlsession.

  • 一級快取針對sqlsession。有的時候我們需要講mapper進行快取。換句話說講快取放到sqlsessionfactory上。這時候我們引入了二級快取的概念。mybatis預設是不開啟二級快取的。開啟的方式也很簡單


<cache/>
  • 只需要在mybatis-config.xml中加入cache這個標籤就可以了。當然我們如果是用pojo接收結果的。pojo需要進行序列化。

  • 在二級快取中我們所有的select都講被快取起來。在insert、update、delete執行的時候都將會重新整理快取的。下面給出一個全的cache配合。


<cache eviction="LRU" flushInterval="1000" size="1024" readOnly="true"/>

自定義快取

  • 我們上面開啟的只是mybatis為我們提供的二級快取。但是往往我們都是結合redis這種第三方快取實現的。下面我們來看看我們如何實現自定義快取。
    • 首先我們需要先繼承org.apache.ibatis.cache.Cache介面。然後通過在mybatis-config.xml中引入我們的類就行了
  • `<cache type="*******"/>`往往在select、insert、update、delete這些標籤中和userCache、flushCache結合使用實現快取的使用的sql
  • 加入戰隊

# 加入戰隊

微信公眾號

相關推薦

mybatis()--對映元件

目錄 前言 標籤 select insert|update|delete 引數 resultMap cache 自定義快取

Qt控制元件:輸入元件

Qt Creator有15種Input Widgets,如下圖: Input Widgets的Qt類和名稱介紹如下表 控制元件類 控制元件名 中文名 控制元件類 控制元件名 中文名 QComboBox ComboBox 不可編輯組合框 QDateEdit DateE

Mybatis(一)---環境配置及架構梳理

目錄 簡介 ORM模型 Hibernate Ibatis 環境搭建 jar 配置 xml方式配置 程式碼方式配

Mybatis(二)---生命週期

目錄 回顧 SqlSessionFactoryBuilder SqlSessionFactory openSessionFromDataSource Executor

mybatis(三)--標籤及TypeHandler使用

目錄 話引 XML配置標籤 概覽 properties 子標籤property resource 程式注入

mybatis(四)--ObjectFactory

目錄 前言 mybatis的ObjectFactory 原始碼 setProperties  create instantiateClass

mybatis(六)--二級快取

目錄 簡介 配置 原始碼 CachingExecutor 缺點 自定義二級快取 簡介 上一章節我們簡單瞭解了二級快取的配置。今

JavaEE-SSM:003 Mybatis對映及各元件生命週期

1.對映器是什麼? 它包含一個xml配置檔案和一個對應的Mapper介面 xml可以提供動態SQL,配置Sql引數型別,返回值型別,快取,重新整理,提供對映規則等 Mapper是對xml檔案的對映,實際上配置好xml檔案後就不再操作xml檔案,直接操作Mapper介面操作資料庫即可。

QT:控制元件)輸入元件Input Widgets

    Qt Creator有15種Input Widgets,如下圖:     Input Widgets的Qt類和名稱介紹如下表     控制元件類     控制元件

第三百十三節,Python分布式爬蟲打造搜索引擎Scrapy—scrapy的暫停與重啟

ctrl+ 裏的 dir 其中 重啟 requests 引擎 image .cn 第三百五十三節,Python分布式爬蟲打造搜索引擎Scrapy精講—scrapy的暫停與重啟 scrapy的每一個爬蟲,暫停時可以記錄暫停狀態以及爬取了哪些url,重啟時可以從暫停狀態開始

第三百十四節,Python分布式爬蟲打造搜索引擎Scrapy—數據收集(Stats Collection)

ack 高效 所有 crawl resp spider 方法 啟動 定義 第三百五十四節,Python分布式爬蟲打造搜索引擎Scrapy精講—數據收集(Stats Collection) Scrapy提供了方便的收集數據的機制。數據以key/value方式存儲,值大多是

第三百節,Python分布式爬蟲打造搜索引擎Scrapy—scrapy信號詳解

第一個 如果 -c stopped lin 支持 idle 資源 spider 第三百五十五節,Python分布式爬蟲打造搜索引擎Scrapy精講—scrapy信號詳解 信號一般使用信號分發器dispatcher.connect(),來設置信號,和信號觸發函數,當捕獲到信號

第三百十八節,Python分布式爬蟲打造搜索引擎Scrapy—將bloomfilter(布隆過濾器)集成到scrapy-redis中

分布式爬蟲 times 操作 加載 ger 目錄 需要 ini space 第三百五十八節,Python分布式爬蟲打造搜索引擎Scrapy精講—將bloomfilter(布隆過濾器)集成到scrapy-redis中,判斷URL是否重復 布隆過濾器(Bloom Filte

第三百六十節,Python分布式爬蟲打造搜索引擎Scrapy—elasticsearch(搜索引擎)的查詢

搜索引擎 ack 復合 分布式 內置 分布 在一起 一起 分類 第三百六十五節,Python分布式爬蟲打造搜索引擎Scrapy精講—elasticsearch(搜索引擎)的查詢 elasticsearch(搜索引擎)的查詢 elasticsearch是功能非常強大的搜索

(值得收藏!)Vi 文本編輯

數字 bdd 跳轉 效果 linu 技術 文本操作 關鍵字 管理 簡介 vi 編輯器通常被簡稱為vi, vi 編輯器是Linux和Unix上最基本的文本編輯器,工作在字符模式下。它可以執行輸出、刪除、查找、替換、塊操作等眾多文本操作,而且用戶可以根據自己的需要對其進行定制

Mybatis對映(一)

XML查詢引數: parameterType:可以給出類別名,全名等. resultType:查詢結果,可以為 int,float,map等不可以與resultMap同時使用。 resultMap: 對映集的引用可以配置對映規則,級聯,typeHandler等,是mybatis最複雜的元素。 &nbs

Mybatis對映(二)

上一篇文章返回是resultType,但其無法定義多的屬性,比如typeHandler,級聯等。為了支援複雜對映,可以用resultMap屬性,先定義resultmap屬性: <mapper namespace="com.ssm.chapter5.mapper.RoleMapper">

後端-框架-Spring-MyBatis-注入對映

後端-框架-Spring-MyBatis-注入對映器 其中的配置檔案 <!-- 資料來源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <p

JavaEE-SSM:014 Mybatis對映(5)

ResultMap子元素一覽     <constructor>節點配置   假如,我們返回型別的POJO不包含無參建構函式,只有一個下面的有參構造: public class RoleBean { public Rol

JavaEE-SSM:013 Mybatis對映(4)

SQL節點:一次定義,多次呼叫   先定義SQL節點:id用於參考 <sql id="preSql"> id,role_name,note </sql>   使用SQL: 通過include節點並指定refid,refid是