mybatis动态sql ,修改和删除 语句中 大坑,不要在条件中使用动态SQL,一不小心全表数据都被操作了
1 修改语句,想死就这么写,注意看:条件部分,用的是动态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>
2 删除语句,想死就这么写,如果传入的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)!