zoukankan      html  css  js  c++  java
  • mybatis中的动态SQL

    动态SQL是mybatis的强大特性之一,mybatis中的动态sql是通过if set where choose foreache等动态标签来实现的。

    ①if:根据参数条件判断是否显示某些sql;

    例如:List<Teacher> selectMap(Map<String,Object> map);//参数传递的是Map时,#{key}取value
     <select id="selectMap" parameterType="java.util.Map" resultType="Teacher">
            select * from h_teacher
            <where>
            <if test="id!=null">
                id=#{id}
            </if>
            <if test="name!=null and name!=''">
                or name=#{name}
            </if>
            </where>
        </select>

    ②where:会自动处理where筛选中的sql条件,如果没有任何条件,则不会添加where,如果条件以and、or开头,会自动去除;

    例如:List<Teacher> selectMap(Map<String,Object> map);//参数传递的是Map时,#{key}取value
    <!--    传递map,指定parameterType为map
            <if test> test中填写boolean类型表达式,判断
    -->
        <select id="selectMap" parameterType="java.util.Map" resultType="Teacher">
            select * from h_teacher
            <where>
            <if test="id!=null">
                id=#{id}
            </if>
            <if test="name!=null and name!=''">
                or name=#{name}
            </if>
            </where>
        </select>

    ③foreach:对集合进行遍历;

    例如:int deleteByIds(Integer[] ids);//批量删除  传递数组/集合
     <delete id="deleteByIds">
            delete form h_teacher where id in
            <foreach collection="array" item="id" open="(" close=")" separator=",">
                #{id}
            </foreach>
        </delete>

    ④choose when otherwise:类似于java中的switch语句,choose=>switch,when=>case,otherwise=>default;

    例如:List<Teacher> selectByIdOrName(@Param("id") Integer id, @Param("name") String name);//根据id或name查找数据 演示多个参数的取值方式,通过@Param取别名
    <select id="selectByIdOrName" resultType="Teacher">
    <!--select * from h_teacher where id=#{id} or name=#{name}-->
            select * from h_teacher
            <where>
    <!--choose,when,otherwise 三个标签配合使用,只会匹配一个选项-->
                <choose>
                    <when test="id!=null">
                        id=#{id}
                    </when>
                    <otherwise>
                        name=#{name}
                    </otherwise>
                </choose>
            </where>
        </select>

    ⑤set:元素会动态地在行首插入SET关键字,并会删掉额外的逗号;

    例如:int updateSelective(Teacher teacher);//选择性更新
        <update id="updateSelective" parameterType="Teacher">
            update h_teacher
            <!--set标签,会去除末尾的逗号-->
            <set>
                <if test="name!=null">
                    name=#{name},
                </if>
                <if test="age!=null">
                    age=#{age}
                </if>
            </set>
            where id=#{id}
        </update>

    ⑥trim:指定以特定字符开始和结束,并去除前后的特定字符;

    例如:int insertSelective(Teacher teacher);//选择性插入数据
    <insert id="insertSelective" parameterType="Teacher">
            <selectKey keyProperty="id" resultType="integer" order="BEFORE">
                select seq_t_teacher.nextval from dual
            </selectKey>
            insert into h_teacher
            <trim prefix="(" suffix=")" suffixOverrides=",">
                id,
                <if test="name!=null">name,</if>
                <if test="age!=null">age</if>
            </trim>
            <trim prefix="values (" suffix=")" suffixOverrides=",">
                #{id},
                <if test="name!=null">#{name},</if>
                <if test="age!=null">#{age}</if>
            </trim>
        </insert>

    ⑦bind:元素允许你在OGNL表达式以外创建一个变量,并将其绑定到当前的上下文,常用模糊语句查询;

    例如:List<Teacher> selectByName(@Param("name") String name);//根据名称进行模糊查询
    <!--    bind标签:用来向上下文中存值,name为值的名称,value指定值的内容-->
        <select id="selectByName" resultType="Teacher">
            <bind name="nameLike" value="'%'+name+'%'"/>
            select * from h_teacher where name like #{nameLike}
        </select>

    ⑧sql:定义sql片段,include引入sql片段;

    例如:Teacher selectById(Integer id);//根据主键查询
    <!--    通常抽取出通用的sql片段-->
        <sql id="selectColumn">
            id,name,age
        </sql>
        <!-- id指定关联的方法名  resultType:关联返回的类型  parameterType:表示该sql语句中需要传入的参数, 类型要与对应的接口方法的类型一致
            指定参数类型,可省略
            resultType:定义出参,匹配普通Java类型或自定义的pojo【出参类型若不指定,将为语句类型默认类型,如语句返回值为int】
            -->
    <!-- #{参数名}:获取接口方法传递的单个参数   -->
        <select id="selectById" parameterType="integer" resultType="Teacher">
            select <include refid="selectColumn"></include> from H_TEACHER where ID=#{id}
        </select>
  • 相关阅读:
    linux 首次登陆与线上求助
    003生信人必练
    计算器概论
    01 git 概念
    01 基因组学基本感念
    Python 函数习题
    Python字符编码详解,str,bytes
    python class
    [Leetcode]287. Find the Duplicate Number
    深度解析Word2vec
  • 原文地址:https://www.cnblogs.com/xie-qi/p/12901223.html
Copyright © 2011-2022 走看看