通过Mybatis实现数据库编程时,在XML中配置SQL语句时的标签有哪些?

目前常见的标签有:

<mapper>标签

这是XML文件配置的根标签,并且XML文件配置的根标签必须是<mapper>;

<mapper>标签上必须配饰  namespace 属性,此属性的值是接口 XX 的全限定名(包名与接口名);

比如:

<mapper namespace="cn.csmall.product.mapper.BrandMapper">

增删改查 语句标签

<resultMap>标签

详解见个人关于ResultMap文章。

<SQL>标签

用来定义sql片段,以此达到复用;

比如原XML:

  <!--List<AlbumListItemVO> list();-->//此处是对应抽象方法
    <select id="list" resultMap="ListResultMap">
        select id, name, description, sort
        from pms_album
        group by id desc
    </select>
 <!-- 此处resultMap标签没写封装字段对应的属性名 是因为名字一样可以省略 -->
 <resultMap id="ListResultMap" type="cn.tedu.csmall.product.pojo.vo.AlbumListItemVO">

    </resultMap>

使用

 使用<sql>标签进行复用,可以当多个 SQL块通过<include >标签通过 refid 找到对应的<sql>标签的id使用使用

如下所示:

 <!--List<AlbumListItemVO> list();-->
    <select id="list" resultMap="ListResultMap">
        select <include refid="ListQueryFields"></include>
        from pms_album
        group by id desc
    </select>

    <sql id="ListQueryFields"  >
        <if test="true">  //此处的<if>标签没有特殊含义,只是为了更严谨
            id, name, description, sort
        </if>

    </sql>
    <resultMap id="ListResultMap" type="cn.csmall.product.pojo.vo.AlbumListItemVO">

<foreach>标签

作用:常用语 in 这样的语法中;这里用接收 list 集合为例:

XML中配置的 批量插入操作:

<!--int insertBatch(List<Album> albumList) 批量插入-->
    <insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
        insert into pms_album(name,description,sort) values
        <foreach collection="list" item="album" separator="," >
            (#{album.name},#{album.description},#{album.sort})
        </foreach>
    </insert>

此代码是循环 插入list表数据。

<if>标签

用法:进行判断,跟java中的if类似  但是需要注意Mybatis中:没有if ... else...的语句

<if test="name!=null">
                name=#{name},
            </if>
 <if test="sort!=null">
                sort=#{sort}
             </if>

作用就是 防止传入空值;比如,当进行更新操作时,为了代码效率(防止每一个更新情况都对应要配置一个<update>),一般会把所有有可能需要更新的表字段 写入XML中的<update>标签中;这样后,当你只想跟心name的值时,会只传入name的值,其他值为空,如果没有这if判断,空值会直接传入,这样跟新得到的数据 除了name是跟新后的值,其他表字段的值全默认传了空值。

<set>标签和<where>标签类似

一般<set>标签和<where>标签都和<if>标签结合使用;此外<set>和<where>标签都有自动判断功能

自动判断:

如果任何条件都不成立,那么就在sql语句里就不会出现set/where关键字,

如果有任何条件成立,<set>会自动去掉多余的",";而<where>会自动去掉多出来的 and 或者 or。

<set>演示

<update id="updateById" >
        UPDATE pms_album
        <set>
            <if test="name!=null">
                name=#{name},
            </if>
            <if test="description!=null">
                description=#{description},
            </if>
            <if test="sort!=null">
                sort=#{sort},  
            </if>
        </set>
        WHERE
        id=#{id}
    </update>

注意:多个属性时,第一个属性 如   name=#{name}, 后必须加,之后的属性会自动判断是否添加。  此处我们无法判断 那个修改的属性是第一个(因为存在可能某个属性不修改的情况),为此我们尽量每个属性结尾都添加个 , 号。

<where>演示

<select id="listProduct" resultType="Product">
    select * from product_
    <where>
        <if test="name!=null">
            and name like concat('%',#{name},'%')
        </if>        
        <if test="price!=null and price!=0">
            and price > #{price}
        </if>
    </where>     
</select

此处的 每个属性 前都加了and 原因和上述一样。

choose when otherwise 标签

<if>标签中说明了Mybatis中没有if...else...的语句,其实choose when otherwise标签就相当于if...else。

when 相当于 if ; otherwise 相当于 else

演示:

  <select id="listProduct" resultType="Product">
              SELECT * FROM product_
              <where>
                <choose>
                  <when test="name != null">
                    and name like concat('%',#{name},'%')
                  </when>          
                  <when test="price !=null and price != 0">
                    and price > #{price}
                  </when>                
                  <otherwise>
                    and id >1
                  </otherwise>
                </choose>
              </where>
        </select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值