码迷,mamicode.com
首页 > 数据库 > 详细

mybatis中动态SQL之trim详解

时间:2017-06-23 17:23:29      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:动态   class   通过   bat   prefix   ref   用法   sql   logs   

一. 背景

  之前一直用<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详解

标签:动态   class   通过   bat   prefix   ref   用法   sql   logs   

原文地址:http://www.cnblogs.com/waterystone/p/7070836.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!