自学内容网 自学内容网

mybatis动态sql ,修改和删除 语句中 大坑,不要在条件中使用动态SQL,一不小心全表数据都被操作了

修改语句,想死就这么写,注意看:条件部分,用的是动态sql,存在很大的风险,当user_id不传入的时候,会导致全表数据被更新,产生大事故 (不要用 不要用 不要用

<!-- 更新用户信息 -->
<update id="update" parameterType="com.xxx.model.UserModel">
    <![CDATA[ UPDATE `t_user` ]]>
    <set>
        <if test="username != null and username.toString() != ''">
            <![CDATA[ `username` = #{username}, ]]>
        </if>
        <if test="email != null and email.toString() != ''">
            <![CDATA[ `email` = #{email}, ]]>
        </if>
    </set>
    <where>
        <if test="user_id != null">
            <![CDATA[ AND `user_id` = #{user_id} ]]>
        </if>
    </where>
</update>

改进如下 (用这个 用这个 用这个)
更新的功能,条件部分不要用动态sql,调整后代码如下,更新的时候必须传入用户id,否则报错就可以了

<!-- 更新用户信息 -->
<update id="update" parameterType="com.itsoku.model.UserModel">
    <![CDATA[ UPDATE `t_user` ]]>
    <set>
        <if test="username != null and username.toString() != ''">
            <![CDATA[ `username` = #{username}, ]]>
        </if>
        <if test="email != null and email.toString() != ''">
            <![CDATA[ `email` = #{email}, ]]>
        </if>
    </set>
    where user_id = #{user_id}
</update>






删除语句,想死就这么写,如果传入的map是空,把整个表的数据都给清空了(不要用 不要用 不要用)

<!-- 删除数据 -->
<delete id="delete" parameterType="map">
    <![CDATA[
        DELETE FROM `t_user`
    ]]>
    <where>
        <if test="user_id!=null">
            <![CDATA[ AND `user_id` = #{user_id} ]]>
        </if>
    </where>
</delete>

改进如下(用这个 用这个 用这个)

<!-- 根据用户id删除用户 -->
<delete id="deleteByUserId">
    <![CDATA[
        DELETE FROM `t_user` where `user_id` = #{user_id}
    ]]>
</delete>


原文地址:https://blog.csdn.net/qq_41712271/article/details/142957907

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!