Mybatis映射配置文件中常用标签及释义

本文深入解析Mybatis中动态SQL的实现方式,包括<where>、<foreach>、<if>、<trim>、<choose>、<when>等标签的应用,以及<resultMap>、<sql>标签的使用技巧,帮助开发者掌握更灵活的SQL语句编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis使用mapper.xml编写sql语句时常用的标签及释义:
    1><resultMap>:用来描述如何从数据库结果集中加载对象,一般理解,就是将数据库中的值映射到java中的某一个类里,如此一来进行增删改查的标签可以通过配置resultMap属性将从数据库中获取的数据配置到Java集合中进行封装,resultMap的常用属性有两种:
        id:用于指定<resultMap>的id,当其他标签配置resultMap属性时,会让该属性等于此id;
        type:用于指明将查询结果封装到哪里,可以是一些基本类型,也可以是一个dto类,填写完整的类路径即可
    <resultMap>下常用的标签有两个,<id>和<result>,其说明如下:
        <id>:用于标示对象的唯一属性,比如表示主键,其中的属性说明如下(<id>和<result>的属性类型是一致的)
            column:用于指定数据库中的字段名或者其别名(as);
            property:指定javaBean中的属性名;
            jdbcType:数据库中该字段的数据类型。
        <result>:用于标示非主键的映射规则,属性内容参考<id>

    <!--resultMap示例-->
    <resultMap id="BaseResultMap" type="com.test.person">
        <id column="person_id" jdbcType="INTEGER" property="personId"/>
        <result column="person_name" jdbcType="VARCHAR" property="personName"/>
        <result column="person_sex" jdbcType="VARCHAR" property="personSex"/>
    </resultMap>


    2><sql>:使用sql标签的主要意义在于将编写在增删改查中相同的sql语句抽出进行整理,通常只有一个id属性,用于对相同sql语句进行标记,在调用时通常会在增删改查标签语句中加入<include>标签,<include>标签中的refid属性指向sql标签的id值,sql标签内部与普通的增删改查标签一致,都可以使用<where>、<foreach>、<if>、<trim>、<choose>、<when>等标签,此类标签将在稍后进行说明。

    <!--配置sql标签-->
    <sql id="Base_Person_List">
        person_id,person_name,person_sex
    </sql>

    <!--使用案例-->
    <select id="selectExample" parameterType="com.test.person" resultMap="BaseResultMap">
        select
        <include refid="Base_Person_List"/>
        from tb_person


    3><select>、<insert>、<delete>、<update>标签在此不再进行赘述。
    
    4><where>、<foreach>、<if>、<trim>、<choose>、<when>(重点):动态sql语句实现的基础,用这些标签可以使得sql语句并不仅限于固定的长度,大大扩充了Mybatis的使用场景。
        (1)<where>:通常标签定义体内部都会有<if>标签,类似于sql语句中where的用法,其优点在于如果where后面没有任何条件时(通常是没有满足任何<if>标签中的条件的情况下),<where>标签会在进行sql语句拼接时省略where关键字;
        (2)<foreach>:通常用于动态生成sql语句的查询条件,其主要属性及说明如下:
            item:集合中元素迭代时的别名,该参数为必选;
            index:在list和数组中,index是元素序号,在map中,index是元素的key,该参数可选;
            separator:元素间的分隔符,例如"or","and"等;
            collection:要做foreach的对象,作为入参时,List对象默认用"list"代替作为键,数组对象有"array"代替作为键,Map对象没有默认的键。当然在作为入参时可以使用@Param("keyName")来设置键,设置keyName后,list,array将会失效。除了入参这种情况外,还有一种作为参数对象的某个字段的时候。举个例子:如果User有属性List ids。入参是User对象,那么这个collection = "ids".如果User有属性Ids ids ;其中Ids是个对象,Ids有个属性List id;入参是User对象,那么collection = "ids.id"
            open:foreach代码开始的符号,一般是"("和close=")"连用,通常用在sql语句的in()、values()时。
            close:foreach代码结束的符号,一般是")"和open="("连用,通常用在sql语句的in()、values()时。
        
        (3)<if>:有一个属性test,test属性值是一个符合OGNL要求的表达式,表达式的结果可以是true或者false,除此之外所有的非0值都为true,只有0为false,为true时<if>标签内的sql语句将被拼接,否则省略。
        (4)<trim>:一般用于去除sql语句中多余的and关键字、逗号,或者给sql语句前拼接"where"、"set"以及"values("等前缀,或者添加")"等后缀,可用于选择性插入、更新、删除或者条件查询等操作,属性说明如下:
            prefix:给sql语句拼接的前缀。
            suffix:给sql语句拼接的后缀。
            prefixOverrides:去除sql语句前面的关键字或字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签会去除该"AND"。
            suffixOverrides:去除sql语句后面的关键字或字符,该关键字或者字符由suffixOverrides属性指定。
        (5)<choose>:通常和<when>标签或<otherwise>标签联用,有时候并不想应用所有的条件,而只想从多个选项中选择一个,如果使用if标签,只要test中的表达式结果为true,就会执行if标签中的条件。<choose>标签是按顺序判断其内部when标签中的test条件是否成立,如果有一个成立,则choose结束,choose中所有when的条件都不满足时,则执行otherwise中的sql。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值