trim代替where/set标签
trim 是更灵活用来去处多余关键字的标签,它可以用来实现 where 和 set 的效果。
<!-- 使用 if/trim 代替 where(判断参数) - 将 User 类不为空的属性作为 where 条件 --> <select id="getUsertList_if_trim" resultMap="resultMap_User"> SELECT * FROM user u <trim prefix="WHERE" prefixOverrides="AND|OR"> <if test="username !=null "> u.username LIKE CONCAT(CONCAT('%', #{username, jdbcType=VARCHAR}),'%') </if> <if test="sex != null and sex != '' "> AND u.sex = #{sex, jdbcType=INTEGER} </if> <if test="birthday != null "> AND u.birthday = #{birthday, jdbcType=DATE} </if> </trim> </select>
trim 代替 set
<!-- if/trim代替set(判断参数) - 将 User 类不为空的属性更新 --> <update id="updateUser_if_trim" parameterType="com.yiibai.pojo.User"> UPDATE user <trim prefix="SET" suffixOverrides=","> <if test="username != null and username != '' "> username = #{username}, </if> <if test="sex != null and sex != '' "> sex = #{sex}, </if> <if test="birthday != null "> birthday = #{birthday}, </if> </trim> WHERE user_id = #{user_id} </update>
trim (对包含的内容加上 prefix,或者 suffix 等,前缀,后缀)
<select id="dynamicTrimTest" parameterType="Blog" resultType="Blog"> select * from t_blog <trim prefix="where" prefixOverrides="and |or"> <if test="title != null"> title = #{title} </if> <if test="content != null"> and content = #{content} </if> <if test="owner != null"> or owner = #{owner} </if> </trim> </select>
trim 元素的主要功能是可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是 prefix 和 suffix;可以把包含内容的首部某些内容覆盖,即忽略,也可以把尾部的某些内容覆盖,对应的属性是 prefixOverrides 和 suffixOverrides;正因为 trim 有这样的功能,所以我们也可以非常简单的利用 trim 来代替 where 元素的功能。