MyBatis XML語言查詢語句優化技巧

一、減少查詢返回數據量

1、在查詢語句中使用 resultMap,只選取需要的列,減少返回的數據量。

<resultMap id="userMap" type="User">
  <id property="id" column="user_id" />
  <result property="name" column="user_name" />
  <result property="age" column="user_age" />
</resultMap>

<select id="getUserById" resultMap="userMap" parameterType="java.lang.Long">
  SELECT user_id, user_name, user_age
  FROM user
  WHERE user_id=#{id}
</select>

2、使用分頁查詢,限制返回數據量。

<select id="getUser" resultType="User">
  SELECT user_id, user_name, user_age
  FROM user
  LIMIT #{pageNum}, #{pageSize}
</select>

二、合理使用緩存

1、開啟二級緩存,使用緩存降低查詢次數。

<cache eviction="LRU"
  flushInterval="600000"
  size="512"
  readOnly="true">
</cache>

2、使用查詢緩存

<select id="getUser" resultType="User" useCache="true">
  SELECT user_id, user_name, user_age
  FROM user
  WHERE user_id=#{id}
</select>

三、使用動態 SQL

1、使用If標籤,根據不同的條件動態生成查詢語句。

<select id="getUser" parameterType="User" resultMap="userMap">
  SELECT user_id, user_name, user_age
  FROM user
  WHERE 1=1
  <if test="id != null">
    AND user_id = #{id}
  </if>
  <if test="name != null">
    AND user_name = #{name}
  </if>
</select>

2、使用choose, when, otherwise標籤,根據不同情況生成對應查詢語句。

<select id="getUser" parameterType="User" resultMap="userMap">
  SELECT user_id, user_name, user_age
  FROM user
  <where>
    <choose>
      <when test="id != null">
        user_id = #{id}
      </when>
      <when test="name != null">
        user_name = #{name}
      </when>
      <otherwise>
        1=1
      </otherwise>
    </choose>
  </where>
</select>

四、性能調優

1、使用索引加速查詢,避免全表掃描。

ALTER TABLE user ADD INDEX user_id_index (user_id);

2、使用延遲載入,減少不必要的查詢。

<resultMap id="userMap" type="User">
  <id property="id" column="user_id" />
  <result property="name" column="user_name" />
  <association property="dept" resultMap="deptMap" lazy="true" />
</resultMap>

<select id="getUser" resultMap="userMap" parameterType="java.lang.Long">
  SELECT user_id, user_name, dept_id
  FROM user
  WHERE user_id=#{id}
</select>

<resultMap id="deptMap" type="Dept">
  <id property="id" column="dept_id" />
  <result property="name" column="dept_name" />
</resultMap>

<select id="getDeptById" resultMap="deptMap" parameterType="java.lang.Long">
  SELECT dept_id, dept_name
  FROM dept
  WHERE dept_id=#{id}
</select>

原創文章,作者:YUAL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135860.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YUAL的頭像YUAL
上一篇 2024-10-04 00:15
下一篇 2024-10-04 00:15

相關推薦

  • 使用vscode建立UML圖的實踐和技巧

    本文將重點介紹在使用vscode在軟體開發中如何建立UML圖,並且給出操作交互和技巧的指導。 一、概述 在軟體開發中,UML圖是必不可少的重要工具之一。它為軟體架構和各種設計模式的…

    編程 2025-04-29
  • Python3支持多行語句

    Python3是一種高級編程語言,開發人員可以輕鬆地使用該語言編寫簡單到複雜的代碼。其中Python3支持多行語句,方便開發人員編寫複雜的代碼,提高代碼的可讀性和可維護性。 一、使…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python for循環語句列印九九乘法表

    本篇文章將詳細介紹如何使用Python的for循環語句列印九九乘法表。列印九九乘法表是我們初學Python時經常練習的一項基礎操作,也是編寫Python程序的基本能力之一。 1、基…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python中while語句和for語句的區別

    while語句和for語句是Python中兩種常見的循環語句,它們都可以用於重複執行一段代碼。然而,它們的語法和適用場景有所不同。本文將從多個方面詳細闡述Python中while語…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python中自定義函數必須有return語句

    自定義函數是Python中最常見、最基本也是最重要的語句之一。在Python中,自定義函數必須有明確的返回值,即必須要有return語句。本篇文章將從以下幾個方面對此進行詳細闡述。…

    編程 2025-04-29

發表回復

登錄後才能評論