动态sql

简介: 动态sql:             以前的sql如果你有3列数据,你要修改数据、那你就要写修改的第一列的,一二列的,一二三列的,这样操作很麻烦。              但是如果你用sql预处理的话他就会根据你输入你对象,来判断你要修改的参数,让sql变得很灵活。
动态sql:

             以前的sql如果你有3列数据,你要修改数据、那你就要写修改的第一列的,一二列的,一二三列的,这样操作很麻烦。

             但是如果你用sql预处理的话他就会根据你输入你对象,来判断你要修改的参数,让sql变得很灵活。


注意事项!!

                  封装属性的时候 有一定不能用基本数据类型 要用封装数据类型

                  基本数据类型没有赋值的时候是零

                  封装数据类型 没有赋值的时候是null


if:
    test  条件,可以取属性值或者参数 可以用and加入多个判断


set:

      update生成的,可以生成 set 关键字 还有就是去除最后逗号


    <update id="updKc" parameterType="com.dao.kecheng">
--       动态sql好处让sql变得灵活,修改他可以进行判断,根据你传入的对象的参数来判断你要修改的值
        update kecheng
        <set>
--            这里用《set》可以帮助你自动去除 逗号多参数是就有好处
            <if test="kname!=null">
                kname=#{kname},
            </if>
        </set>
        where kid=#{kid}
--   这里要注意的是动态sql的值都是键值对,对象参数对应数据库的的的参数
    </update>


trim:

         去除或添加

         suffixOverrides  末尾去除符号(如果你声明的话,他就会你最后的值后面加个,例如(name,)无法识别sql语句)

         suffix  末尾添加符号

         prefix  前面添加符号

         prefixOverrides 前面去除符号



   <insert id="inster" parameterType="com.dao.Student">
        insert into student(
        <trim suffixOverrides=",">
--             这里要注意取出末尾逗号,不取出的话如果你在插入时,如果你插入一个值不去除逗号他就会默认你后面还要插入会报sql语法错误
            <if test="address!=null">
                address,
            </if>
            <if test="sname!=null">
                sname,
            </if>
            <if test="cid">
                cid,
            </if>
        </trim>
        )values(
--         还要注意这些都是在括号中执行的
        <trim suffixOverrides=",">
            <if test="address!=null">
                #{address},
            </if>
            <if test="sname!=null">
              #{sname},
            </if>
            <if test="cid">
                #{cid},
            </if>
        </trim>
        )
    </insert>

查询动态sql查询可以根据你选择的条件进行查询


   List<Student> seleStu(String sname,String address,Integer cid,Integer sid); //这里可以根据你输入的值来判断你要查询的值,
不选择输入null就可以这里要注意要用封装数据类型,
因为基本数据类型不为空,为0


    <select id="seleStu" resultType="com.dao.Student">
        select * from student
        <where>
            <trim suffixOverrides="and">
                <if test="param1!=null">
--                     根据你所输入的参数来决定你要查询的条件
                    sname=#{param1}and
                </if>
                <if test="param2!=null">
                    address=#{param2}and
                </if>
                <if test="param3!=null">
                    cid=#{param3}and
                </if>
                <if test="param4!=null">
                    sid=#{param4}
                </if>
            </trim>
        </where>
--         这里是查询玩排序按降序
        ORDER BY sid DESC
    </select>


如果上面动态查询中发生: Parameter 'uid' not found. Available parameters are [arg3, arg2, param5, arg5, arg1, arg0, param3, ] 错误

可以试试下面写法

and写前面<where>标记会自动去除and

 <select id="sleuse" resultType="com.sun.sm.Dao.Urers">
        SELECT*FROM urers
        <where>
            <if test="uid !=null">
                uid=#{arg0}
            </if>
            <if test="arg1 !=null">
                and username=#{arg1}
            </if>
            <if test="arg2 !=null">
                and password=#{arg2}
            </if>
            <if test="arg3 !=null">
                and jine=#{arg3}
            </if>
            <if test="arg4 !=null">
                and logerror=#{arg4}
            </if>
            <if test="arg5 !=null">
                and utype=#{arg5}
            </if>
        </where>
    </select>

查询语句 根据你的输出选择要输出的条件



    <select id="selectStudentRowSumByLike" parameterType="java.lang.String" resultType="java.lang.Integer">
        select count(*) from student where
        <choose>
            <when test="param1 == 'sname'">
                sname
            </when>
            <when test="param1 == 'address'">
                address
            </when>
            <when test="param1 == 'email'">
                email
            </when>
            <when test="param1 == 'phone'">
                phone
            </when>
        </choose>
        like #{param2}
    </select>

动态查询


    <select id="selectOrderAllByUseridLimit" resultMap="BaseResultMap">       
	   SELECT * FROM os_order
        WHERE userid=#{param1} 
      <choose>
        <when test="param5==null">  判断这个条件成立就进这里 
          AND createtime >= #{param2}
          AND createtime <= #{param3}
          <if test="param4!='ALL'"> 判断这个条件成立就进这里
            AND orderstate = #{param4}
          </if>
        </when>
        <otherwise>  条件不成立就进这里 用这个条件
          AND orderid=#{param5}
        </otherwise>
      </choose>
        ORDER BY createtime DESC LIMIT #{param6},#{param7}
    </select>



目录
相关文章
|
1月前
|
SQL Java 关系型数据库
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
18 0
|
1月前
|
SQL Java 关系型数据库
MyBatis中的9种常用动态sql标签精妙用法
MyBatis中的9种常用动态sql标签精妙用法
64 0
|
5月前
|
SQL XML Java
Mybatis之动态SQL(带你了解动态SQL的魅力)
Mybatis之动态SQL(带你了解动态SQL的魅力)
356 0
|
1月前
|
SQL druid Java
【MyBatis】2、MyBatis 的动态 SQL 和增删改操作
【MyBatis】2、MyBatis 的动态 SQL 和增删改操作
29 0
|
2月前
|
SQL XML Java
【JavaEE进阶】 MyBatis之动态SQL
【JavaEE进阶】 MyBatis之动态SQL
|
3月前
|
SQL 缓存 Java
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
64 0
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
|
3月前
|
SQL XML Java
【MyBatis】动态SQL
【MyBatis】动态SQL
|
3月前
|
SQL XML Java
MyBatis 实现动态 SQL
 MyBatis 中的动态 SQL 就是SQL语句可以根据不同的情况情况来拼接不同的sql。 本文会介绍 xml 和 注解 两种方式的动态SQL实现方式。
71 1
|
3月前
|
SQL Java 数据库连接
Mybatis之动态SQL
【1月更文挑战第4天】Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题
41 2
|
3月前
|
SQL Java 数据库连接
一文彻底搞懂Mybatis系列(九)之Mybatis动态SQL标签总结
一文彻底搞懂Mybatis系列(九)之Mybatis动态SQL标签总结
110 0