首页 > 代码库 > mybatis中动态SQL之trim详解
mybatis中动态SQL之trim详解
一. 背景
之前一直用<where>、<update>、<if>、<foreach>标签用的多,知道有<trim>这个标签,但很少去用,也没有去深入理解它,直到最近遇到一个问题。问题是这样的:
一个SQL有三个int查询字段a、b、c,表达式为:a=#{a} AND (b=#{b} OR c=#{c})。其中a是必查的,b和c为非必查的(这里假定传入-1表示该字段不参与查询)。那么该表达式会有以下几种形态:
- a=#{a}
- a=#{a} AND b=#{b}
- a=#{a} AND c=#{c}
- a=#{a} AND (b=#{b} OR c=#{c})
看到这个需求后,觉得逻辑还是挺简单的,但写起mapper的SQL来并不是那么容易(如果你有的话,欢迎下边评论贴出来)。考虑了多层<if>、<choose>等标签,虽然也能实现这个功能,但过于繁琐。有没有一种更简单的实现方式?有!<trim>!!!
二. 功能描述与用法
网上关于<trim>的介绍并不多,通过看mybatis的源码,一句话描述trim的功能:子句首尾的替换。
用法:
WHERE a = #{a} <trim prefix="AND(" prefixOverrides="OR" suffix=")"> <if test="b != -1"> OR b = #{b} </if> <if test="c != -1"> OR c = #{c} </if> </trim>
mybatis中动态SQL之trim详解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。