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/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中自定义函数必须有return语句

    自定义函数是Python中最常见、最基本也是最重要的语句之一。在Python中,自定义函数必须有明确的返回值,即必须要有return语句。本篇文章将从以下几个方面对此进行详细阐述。…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29

发表回复

登录后才能评论