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

    动态sql:<where>

    动态sql:<if>

    动态sql:<sql>

    动态sql:<trim>

    create table student(
       id int(11) primary key,
       sname varhcar(11), 
       address varhcar(20),
       sex varchar(5) 
    );

    动态sql:<set>

    如果我们需要进行一些复杂的要求,此时就需要进行sql的拼接,mybatis为我们提供了动态sql帮助我们进行sql的拼接

    我们简单的创建一个表,用来测试这些动态sql

    1.<where>和<if>经常一起使用,因此我们在这里一起讲解

    <where>:用于拼接where 语句等同于where 1=1如果有条件的话,则在后面拼接and 条件即可,如果没有条件的话则等同于select * from student where 1=1

    而与<where>标签经常一起使用的则是<if>标签。

    <if test="">:test里面写入条件,如果符合则拼接标签体内的sql语句

    下面是<if>和<where>的结合

    <select id="studentSelect" parameterType="student" resultType="student">
            select * from student
            <where>
                <!-- test:条件 -->
                <if test="sname!=null">
                    and sname=#{sname}
                </if>
                <if test="id!=null">
                    and id = #{id}
                </if>
            </where>
     </select>

    2.<sql>和<trim>经常一起使用,我们在这里一起讲解

    <sql>可以书写一些sql片段,比如当插入的时候需要有insert into 表名(字段名) values(值)

    我们可以将"字段名"和"值"的sql语句通过<sql>标签书写

    由于字段名和值之间需要由逗号隔开,而我们不知道哪些字段需要插入,因此需要在每一个字段或值后面添加逗号,

    但是这样最后一个字段名或值后面会多一个逗号,因此我们使用<trim>标签

    <trim suffixOverrides="">:即为将后缀的所不需要的语句去掉

        <sql id="key">
            <trim suffixOverrides=",">
                <if test="sname!=null">
                    sname,
                </if>
            </trim>
        </sql>
    
        <sql id="value">
            <trim suffixOverrides=",">
                <if test="sname!=null">
                    #{sname},
                </if>
            </trim>
        </sql>

    而我们在<insert>中使用<include refid="">来使用这些<sql>标签

        <insert id="add" parameterType="com.oracle.pojo.Student">
            insert into student (
            <include refid="key" />
            ) values (
            <include refid="value" />
            )
        </insert> 

    3.<foreach> 标签

    当我们进行查询或删除可能会有delete from student where id in(1,2,3)这样的批量删除语句

    这个时候我们的parameterType传入的参数类型则是"list",而这是一个数组,我们需要遍历一下这个数组,这个时候就有了<foreach>标签

    <foreach>标签可以循环遍历传入的数组

    collection:要遍历的数组

    open:拼接sql是以什么开始的,一般是”(”

    close: 拼接sql是以什么介绍的,一般是”)”

    item:遍历出来的元素

            <delete id="delete" parameterType="list">
            <if test="list!=null">
                delete from student
                <where>
                    and id in
                    <foreach collection="list" open="(" close=")" item="value"
                        separator=",">
                        #{value}
                    </foreach>
                </where>
            </if>
        </delete>
    

    4.<set>标签

    这个标签用在更新语句,用在update操作中,通常和<if>还有<trim>一起使用

    <update id="update" parameterType="student">
            update student
            <set>
                <trim suffixOverrides=",">
                    <if test="sname!=null">
                        sname = #{sname},
                    </if>
                    <if test="address!=null">
                        sname = #{address},
                    </if>
                    <if test="sex!=null">
                        sex = #{sex},
                    </if>
                </trim>
            </set>
            where id = #{id}
        </update>
  • 相关阅读:
    paramiko使用
    requests防止中文乱码
    RESTful架构
    关于pandas
    echarts基础使用
    跨站请求伪造CSRF原理
    js将方法作为参数调用
    Newtonsoft.Json解析json字符串和写json字符串
    图片压缩
    sql去重
  • 原文地址:https://www.cnblogs.com/mhm111/p/11387881.html
Copyright © 2011-2022 走看看