Mybatis(动态sql标签)

Posted zfyyfw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis(动态sql标签)相关的知识,希望对你有一定的参考价值。

  动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。
MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。

 

  SQL标签(if,choose,where,trim,foreach)

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhiyou100.hhz.dao.UsersDao">
    <!-- 动态sql片段 -->
    <sql id="userscolumn">id,name,sex,age,created</sql>
    <select id="selectByWhere" parameterType="int" resultType="com.zhiyou100.hhz.bean.Users">
        select <include refid="userscolumn"/> from users
        <!-- where 可以在第一个判断成功的语句前加where 且去除and -->
        <where>
            <if test="name!=null and name!=‘‘">
                and name=#name
            </if>
            <if test="sex!=null and sex!=‘‘">
                and sex=#sex
            </if>
            <if test="age>0">
                and age=#age
            </if>
        </where>
    </select>

    <update id="updateByWhere">
        update users
        <!-- set可以在第一个判断成功的语句前加set 且去除, -->
        <set>
            <if test="name!=null and name!=‘‘">
                name=#name,
            </if>
            <if test="sex!=null and sex!=‘‘">
                sex=#sex,
            </if>
            <if test="age>0">
                age=#age,
            </if>
            <if test="created!=null and created!=‘‘">
                created=#created
            </if>
        </set>
        where id=#id
    </update>

    <select id="selectByWhere2" resultType="com.zhiyou100.hhz.bean.Users">
        select <include refid="userscolumn"/> from users 
        <!-- trim可以代替where和set 做到类似的效果
            prefix:添加前缀
            prefixOverrides:去除前缀
            suffix:添加后缀
            suffixOverrides:去除后缀
         -->
        <trim prefix="where" prefixOverrides="and">
            <if test="name!=null and name!=‘‘">
                and name=#name
            </if>
            <if test="sex!=null and sex!=‘‘">
                and sex=#sex
            </if>
            <if test="age>0">
                and age=#age
            </if>
        </trim>
    </select>

    <!-- 循环遍历数组
        collection:集合
        open:前缀
        close:后缀
        separator:每次遍历的间隔
        item:集合命名
     -->
    <delete id="deleteById">
        delete from users where id in
        <foreach collection="ids" open="(" close=")" separator="," item="id">
            #id
        </foreach>
    </delete>

    <select id="selectById" resultType="com.zhiyou100.hhz.bean.Users">
        select <include refid="userscolumn"/>from users 
        <where>
        <!-- choose+when+otherwise类似java中的switch+case+default -->
            <choose>
                <when test="name!=null and name!=‘‘">
                    name=#name
                </when>
                <when test="sex!=null and sex!=‘‘">
                    sex=#sex
                </when>
                <when test="age>0">
                    age=#age
                </when>
                <otherwise>
                    created=#created
                </otherwise>
            </choose>
        </where>
    </select>
</mapper>

 

以上是关于Mybatis(动态sql标签)的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis动态SQL

Mybatis(动态sql标签)

[刘阳Java]_MyBatis_动态SQL标签用法_第7讲

MyBatis动态SQL标签用法

9SpringBoot+Mybatis整合------动态sql

Mybatis动态sql