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)
YUALYUAL
上一篇 2024-10-04
下一篇 2024-10-04

相关推荐

  • VBA数组赋值详解

    一、VBA数组赋值语句 Dim myArray(2) As String myArray(0) = “Apple” myArray(1) = “Pear” myArray(2) =…

    编程 2024-10-03
  • java直播,java直播源码

    本文目录一览: 1、java视频直播怎么开发 2、java做直播平台需要哪些技术才能实现? 3、java直播课和面授课哪个好 java视频直播怎么开发 直接用现成sdk来实现吧,效…

    编程 2024-10-04
  • Python casefold()

    python 中的casefold()函数通过移除字符串中存在的所有区分大小写来帮助将字符串转换为小写。这类似于casefold()方法,但casefold()更强大、更具攻击性。…

    编程 2024-10-03
  • 黑马python编程学习怎么样(黑马python培训)

    本文目录一览: 1、黑马程序员的python怎么样 2、黑马程序员的python教得好吗? 3、黑马程序员Python+数据分析怎么样? 4、学了b站的黑马Python从零基础到精…

    编程 2024-10-04
  • gcc-o2优化编译器

    一、基本介绍 gcc-o2编译器是GCC编译器家族中的一个,它是一种优化编译器。GCC编译器是一种开源的编译器,广泛应用于计算机科学领域,包括Linux操作系统、嵌入式项目、工业自…

    编程 2024-10-04
  • java中double如何相减,java double 除法运算

    本文目录一览: 1、java double类型变量,相加或相减后面小数为什么会不一样呢? 2、Java中 double 和 Double的区别 两者能互相转换和加减吗 求方法 3、…

    编程 2024-10-03
  • 提高链接可读性的CSS类

    摘要:在本文中,我们将会介绍一些CSS类,这些类可以使链接更加易于阅读。如果你是一个Web开发人员或网站管理员,那么这篇文章将会有助于增强你的站点的可读性和用户体验。 一、CSS类…

    编程 2024-10-04
  • Ribbon使用详解

    一、Ribbon使用 Ribbon是Netflix发布的一套客户端负载均衡工具,用于Spring Cloud中提供丰富的服务治理功能。它可以实现客户端的负载均衡、故障转移、服务路由…

    编程 2024-10-04
  • CSS移动HTML图像的方法

    HTML图像作为网页设计的重要元素,在网页制作中使用广泛,而如何让图像具有动态效果,成为一个值得探究的问题。CSS提供了多种方法实现图像的移动效果,本文将从几个方面对CSS移动HT…

    编程 2024-10-04
  • python知识点官方文档的简单介绍

    本文目录一览: 1、学习python必备的基础知识 2、学习Python应该掌握哪些知识点 3、python主要学习哪些知识点 4、python语言基础知识有哪些? 5、pytho…

发表回复

登录后才能评论