首页 > 其他分享 >Mybatis的Mapper映射文件中常用标签及作用

Mybatis的Mapper映射文件中常用标签及作用

时间:2024-10-14 20:33:04浏览次数:1  
标签:Mapper 缓存 name 映射 标签 age Mybatis WHERE id

Mybatis的Mapper映射文件中常用标签及作用


1.<mapper>标签

主要用于定义 Mapper 接口的映射文件。通常包含命名空间(namespace),该命名空间通常是接口的全限定类名。

 <mapper namespace="com.example.demo.mapper.UserMapper">

2.<insert>标签

用于定义插入语句,对应于 Mapper 接口中带有 @Insert 注解的方法。

   <insert id="insertUser" parameterType="com.example.demo.entity.User">
     INSERT INTO user (name, age) VALUES (#{name}, #{age})
   </insert>

其中id对应mapper层的方法名,parameterType对应传入的参数类型

3.<update>标签

用于定义更新语句,对应于 Mapper 接口中带有 @Update 注解的方法。

   <update id="updateUser" parameterType="com.example.demo.entity.User">
     UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}
   </update>

4.<delete>标签

用于定义删除语句,对应于 Mapper 接口中带有 @Delete 注解的方法。

   <delete id="deleteUserById" parameterType="int">
     DELETE FROM user WHERE id = #{id}
   </delete>

注意在使用<delete>和<updatev标签是需要使用where关键字或者<where>标签加入筛选条件,否则会影响整张表的字段

5.<select>标签

用于定义查询语句,对应于 Mapper 接口中带有 @Select 注解的方法。

   <select id="selectUserById" resultType="com.example.demo.entity.User">
     SELECT * FROM user WHERE id = #{id}
   </select>

其中resultType对应返回值的接收参数的类型。
注意:如果返回多个数据,需要使用List集合接收,否则会报错

6.<resultMap>标签

对于复杂的映射关系,尤其是数据库表和对象模型不完全一致时。可以使用<resultMap>定义一对一或一对多的关系。效果和在查询时给数据库中的字段起别名的效果是一样的,主要是用于将数据库字段与对象属性进行一对一映射的

<resultMap id="userResultMap" type="com.example.demo.entity.User">
     <id property="id" column="user_id"/>
     <result property="name" column="username"/>
     <result property="age" column="user_age"/>
   </resultMap>

7.<if>标签

主要用于增删改查四大标签中指定条件使用,主要用于解决同一条查询中可以存在为空的字段查询导致查找结果异常的问题。

<if test="productKey != null and productKey != ''">
    and product_id = #{productKey}
</if>
<if test="functionName != null and functionName != ''">
    and function_name like concat('%',#{functionName},'%')
</if>
<if test="alertRuleName != null and !alertRuleName.isBlanck()">
    and alert_rule_name like concat('%',#{alertRuleName},'%')
</if>

8.<where>标签

主要用于解决在使用<if>标签是参数全为空导致使用where关键字后面需要拼接 1=1 条件的情况。在使用<where>标签后,会在标签内为空的情况下自动删除该标签,可以自动优化多余的and连接词。

<where>
    <if test="productKey != null and productKey != ''">
       and product_id = #{productKey}
    </if>
    <if test="functionName != null and functionName != ''">
       and function_name like concat('%',#{functionName},'%')
    </if>
    <if test="alertRuleName != null and alertRuleName != ''">
       and alert_rule_name like concat('%',#{alertRuleName},'%')
     </if>
</where>

9.<set>标签

与<where>标签同理,主要用于解决<update>标签出现的可能修改参数全为空的情况,,可以自动优化多余的,连接符

 <update id="updateUser" parameterType="com.example.demo.entity.User">
     <set>
       <if test="name != null">name=#{name},</if>
       <if test="age != null">age=#{age},</if>
     </set>
     WHERE id=#{id}
   </update>

10.<parameter>

用于定义参数类型和参数映射。虽然 <insert>、<update> 和 <delete> 标签本身可以定义参数类型,但<parameter> 标签提供了更细粒度的控制。

   <update id="updateUser" parameterType="com.example.demo.entity.User">
     <set>
       <if test="name != null">name=#{name},</if>
       <if test="age != null">age=#{age},</if>
     </set>
     WHERE id=#{id}
   </update>

11.<sql>和<include>标签

主要用于引用其他 SQL 片段,避免重复编写相同的 SQL 代码。

   <sql id="userColumns">name, age</sql>

   <select id="selectUserById" resultType="com.example.demo.entity.User">
     SELECT <include refid="userColumns"/> FROM user WHERE id = #{id}
   </select>

12.<choose>、<when>、<otherwise>标签

用于条件判断,使得 SQL 更加灵活。

  <select id="selectUsersByCondition" resultType="com.example.demo.entity.User">
    SELECT * FROM user WHERE
    <choose>
      <when test="name != null">
        name LIKE '%${name}%'
      </when>
      <when test="age != null">
        age = #{age}
      </when>
      <otherwise>
        1=1
      </otherwise>
    </choose>
  </select>

13.<foreach>标签

用于遍历集合或数组,常用于批量操作或多条件查询。

    <select id="selectUsersByIds" resultType="com.example.demo.entity.User">
      SELECT * FROM user WHERE id IN
      <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
        #{item}
      </foreach>
    </select>

主要item的值就是mapper层方法对于的属性名或者使用@Param注解指定的值

14.<cache>标签

用于定义缓存策略,可以显著提高查询性能。通过使用缓存,可以避免频繁地执行相同的查询操作,从而减少数据库的负担。

<mapper namespace="com.example.demo.mapper.UserMapper">
  <cache/>
  
  <!-- 其他 SQL 映射 -->
</mapper>

type:指定缓存实现的类型,默认为 PERPETUAL(永久缓存)。常见的类型有:
PERPETUAL:永久缓存。
LRU:最近最少使用的缓存。
FIFO:先进先出缓存。
SOFT:软引用缓存。
WEAK:弱引用缓存。
eviction:缓存驱逐策略,默认为 LRU。常见的驱逐策略有:
LRU:最近最少使用的缓存。
FIFO:先进先出缓存。
flushInterval:缓存刷新间隔,单位为毫秒,默认为 0(不自动刷新)。
size:引用表的大小,默认为 1024。
readOnly:是否只读,默认为 false。设置为 true 表示缓存的数据被认为是只读的,因此不会被更新。
blocking:是否阻塞,默认为 false。设置为 true 表示等待缓存加载完成再返回结果。

15.<bind>标签

用于定义变量绑定,可以在 SQL 中使用变量。

    <select id="selectUserById" resultType="com.example.demo.entity.User">
      <bind name="userId" value="'U_' + id"/>
      SELECT * FROM user WHERE id = #{userId}
    </select>

标签:Mapper,缓存,name,映射,标签,age,Mybatis,WHERE,id
From: https://www.cnblogs.com/trytodo/p/18466036

相关文章

  • Mybatis的Mapper映射文件中常用标签及作用
    Mapper映射文件常用标签1、select-用于映射SELECT语句。此标签用于从数据库中查询数据,并且可以选择返回不同的结果类型。通常需要结合resultType或resultMap属性来指定结果应该映射到哪种Java类型或自定义的结果映射规则。<selectid="selectUsers"resultType="map">......
  • Mybatis的Mapper映射文件中常用标签
    MyBatis是一个Java语言的持久层框架,它支持自定义SQL查询、存储过程以及高级映射。MyBatis简化了JDBC的繁琐操作,如手动设置参数或者获取结果集。MyBatis可以使用XML或注解来配置和映射原生信息,将接口和Java的POJOs(PlainOldJavaObjects,普通的Java对象)映射成数据......
  • MyBatis-Plus 多表联查Mybatis-Plus Join
    com.github.yulichangMybatis-PlusJoin简介在MyBatis-Plus中,使用com.github.yulichang提供的扩展库(Mybatis-PlusJoin),可以非常方便地实现多表联表查询,而不需要手动编写复杂的SQL。这种扩展库简化了联表操作,提供了一种基于Lambda表达式的查询方式。MyBatis-Plus-......
  • mybatis分页查询,总数是对的,数据有重复
    mybatis分页查询,总数是对的,数据有重复在使用MyBatis查询数据时,ORDERBY子句的使用会直接影响到查询结果的顺序。虽然在某些情况下,数据库返回的记录顺序可能看起来是相同的,但实际上没有使用ORDERBY时,返回的顺序是不可预测的,这取决于数据库的内部实现和数据存储的方式。可......
  • mybatis入门案例-传参类型和方式
    mybatis传参类型和方式主要分享一下mybatis的mapper接口参数类型和传参方式,适用于初学者。直接上代码:pom.xml文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta......
  • SpringBoot&Mybatis的苏果超市商品销售管理系统 毕业设计源码93704
                            摘 要在网络信息的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,超市只能以用户为导向,按品种小批量组织生产,以产品的持续创新作为超市最......
  • Java面试题———MyBatis篇
    目录1、Mybatis中#{}和${}的区别2、当实体类中的属性名和表中的字段名不一样,怎么办3、MyBatis动态SQL了解吗4、ResultType和ResultMap有什么区别1、Mybatis中#{}和${}的区别在Mybatis中#{}和${}都可以用于在sql语句中拼接参数,但是在使用方面有很多的区别1、处理方式......
  • Springboot整合Mybatis
    1、创建springboot项目2、勾选mysql驱动和web驱动3、pom.xml导入相关依赖<!--MyBatisPlus启动器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>&l......
  • Mybatis基础操作
    完成员工信息的增删改查操作。准备--部门管理createtabledept(idintunsignedprimarykeyauto_incrementcomment'主键ID',namevarchar(10)notnulluniquecomment'部门名称',create_timedatetimenotnullcomment'创建时间',update_time......
  • Mybatis高级查询-一对多查询
    表介绍和表关系说明新建以下4张表tb_user:用户表tb_order:订单表tb_item:商品表tb_orderdetail:订单详情表【表关系】1.tb_user和tb_order表关系tb_user《==》tb_order:一对多,一个人可以下多个订单tb_order《==》tb_user:一对一,一个订单只能属于一个人......