您的位置:首页 > 数据库

MyBatis的动态SQL详解

2016-12-01 17:34 387 查看
<div class="blog_main">

  <div class="blog_title">

    <h3>

      <a href="/blog/1338557">MyBatis的动态SQL详解</a>

      <em class="actions">      </em>

    </h3>

    <ul class="blog_categories"><strong>博客分类:</strong> <li><a href="/category/131096">mybatis</a></li> </ul>

        <div class="news_tag"><a href="http://www.iteye.com/blogs/tag/MyBatis">MyBatis</a><a href="http://www.iteye.com/blogs/tag/%E5%8A%A8%E6%80%81">动态</a><a href="http://www.iteye.com/blogs/tag/SQL">SQL</a><a href="http://www.iteye.com/blogs/tag/where">where</a><a
href="http://www.iteye.com/blogs/tag/foreach">foreach</a> </div>

     

   

   

 

      </div>

  <div id="blog_content" class="blog_content">

    <div style="font-size: 14px;" class="iteye-blog-content-contain">

<p><a href="/blog/1333271">http://haohaoxuexi.iteye.com/blog/1333271</a></p>

<p> </p>

<p>MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑。</p>

<p>MyBatis中用于实现动态SQL的元素主要有:</p>

<p> </p>

<ul>

<li>if</li>

<li>choose(when,otherwise)</li>

<li>trim</li>

<li>where</li>

<li>set</li>

<li>foreach</li>

</ul>

<div>

<strong>if</strong>就是简单的条件判断,利用if语句我们可以实现某些简单的条件选择。先来看如下一个例子:</
4000
div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Xml代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%3Cselect%20id%3D%22dynamicIfTest%22%20parameterType%3D%22Blog%22%20resultType%3D%22Blog%22%3E%0A%09%09select%20*%20from%20t_blog%20where%201%20%3D%201%0A%09%09%3Cif%20test%3D%22title%20!%3D%20null%22%3E%0A%09%09%09and%20title%20%3D%20%23%7Btitle%7D%0A%09%09%3C%2Fif%3E%0A%09%09%3Cif%20test%3D%22content%20!%3D%20null%22%3E%0A%09%09%09and%20content%20%3D%20%23%7Bcontent%7D%0A%09%09%3C%2Fif%3E%0A%09%09%3Cif%20test%3D%22owner%20!%3D%20null%22%3E%0A%09%09%09and%20owner%20%3D%20%23%7Bowner%7D%0A%09%09%3C%2Fif%3E%0A%09%3C%2Fselect%3E"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-xml"><li><span><span class="tag"><</span><span class="tag-name">select</span><span> </span><span class="attribute">id</span><span>=</span><span
class="attribute-value">"dynamicIfTest"</span><span> </span><span class="attribute">parameterType</span><span>=</span><span class="attribute-value">"Blog"</span><span> </span><span class="attribute">resultType</span><span>=</span><span class="attribute-value">"Blog"</span><span
class="tag">></span><span>  </span></span></li><li><span>    select * from t_blog where <span class="attribute">1</span><span class="attribute-value">1</span><span> = 1  </span></span></li><li><span>    <span
class="tag"><</span><span class="tag-name">if</span><span> </span><span class="attribute">test</span><span>=</span><span class="attribute-value">"title != null"</span><span class="tag">></span><span>  </span></span></li><li><span>        and <span
class="attribute">title</span><span> = #{title}  </span></span></li><li><span>    <span class="tag"></</span><span class="tag-name">if</span><span class="tag">></span><span>  </span></span></li><li><span>    <span
class="tag"><</span><span class="tag-name">if</span><span> </span><span class="attribute">test</span><span>=</span><span class="attribute-value">"content != null"</span><span class="tag">></span><span>  </span></span></li><li><span>        and <span
class="attribute">content</span><span> = #{content}  </span></span></li><li><span>    <span class="tag"></</span><span class="tag-name">if</span><span class="tag">></span><span>  </span></span></li><li><span>    <span
class="tag"><</span><span class="tag-name">if</span><span> </span><span class="attribute">test</span><span>=</span><span class="attribute-value">"owner != null"</span><span class="tag">></span><span>  </span></span></li><li><span>        and <span
class="attribute">owner</span><span> = #{owner}  </span></span></li><li><span>    <span class="tag"></</span><span class="tag-name">if</span><span class="tag">></span><span>  </span></span></li><li><span><span
class="tag"></</span><span class="tag-name">select</span><span class="tag">></span><span>  </span></span></li></ol></div><pre name="code" class="xml" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#"
pre_index="0" title="MyBatis的动态SQL详解" style="display: none;">
<select id="dynamicIfTest" parameterType="Blog" resultType="Blog">
select * from t_blog where 1 = 1
<if test="title != null">
and title = #{title}
</if>
<if test="content != null">
and content = #{content}
</if>
<if test="owner != null">
and owner = #{owner}
</if>
</select></pre>

</div>

<div>这条语句的意思非常简单,如果你提供了title参数,那么就要满足title=#{title},同样如果你提供了Content和Owner的时候,它们也需要满足相应的条件,之后就是返回满足这些条件的所有Blog,这是非常有用的一个功能,以往我们使用其他类型框架或者直接使用JDBC的时候, 如果我们要达到同样的选择效果的时候,我们就需要拼SQL语句,这是极其麻烦的,比起来,上述的动态SQL就要简单多了。</div>

<div> </div>

<div>

<strong>choose</strong>元素的作用就相当于JAVA中的switch语句,基本上跟JSTL中的choose的作用和用法是一样的,通常都是与when和otherwise搭配的。看如下一个例子:</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Xml代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%3Cselect%20id%3D%22dynamicChooseTest%22%20parameterType%3D%22Blog%22%20resultType%3D%22Blog%22%3E%0A%09%09select%20*%20from%20t_blog%20where%201%20%3D%201%20%0A%09%09%3Cchoose%3E%0A%09%09%09%3Cwhen%20test%3D%22title%20!%3D%20null%22%3E%0A%09%09%09%09and%20title%20%3D%20%23%7Btitle%7D%0A%09%09%09%3C%2Fwhen%3E%0A%09%09%09%3Cwhen%20test%3D%22content%20!%3D%20null%22%3E%0A%09%09%09%09and%20content%20%3D%20%23%7Bcontent%7D%0A%09%09%09%3C%2Fwhen%3E%0A%09%09%09%3Cotherwise%3E%0A%09%09%09%09and%20owner%20%3D%20%22owner1%22%0A%09%09%09%3C%2Fotherwise%3E%0A%09%09%3C%2Fchoose%3E%0A%09%3C%2Fselect%3E"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-xml"><li><span><span class="tag"><</span><span class="tag-name">select</span><span> </span><span class="attribute">id</span><span>=</span><span
class="attribute-value">"dynamicChooseTest"</span><span> </span><span class="attribute">parameterType</span><span>=</span><span class="attribute-value">"Blog"</span><span> </span><span class="attribute">resultType</span><span>=</span><span class="attribute-value">"Blog"</span><span
class="tag">></span><span>  </span></span></li><li><span>    select * from t_blog where <span class="attribute">1</span><span class="attribute-value">1</span><span> = 1   </span></span></li><li><span>    <span
class="tag"><</span><span class="tag-name">choose</span><span class="tag">></span><span>  </span></span></li><li><span>        <span class="tag"><</span><span class="tag-name">when</span><span> </span><span
class="attribute">test</span><span>=</span><span class="attribute-value">"title != null"</span><span class="tag">></span><span>  </span></span></li><li><span>            and <span
class="attribute">title</span><span> = #{title}  </span></span></li><li><span>        <span class="tag"></</span><span class="tag-name">when</span><span class="tag">></span><span>  </span></span></li><li><span>        <span
class="tag"><</span><span class="tag-name">when</span><span> </span><span class="attribute">test</span><span>=</span><span class="attribute-value">"content != null"</span><span class="tag">></span><span>  </span></span></li><li><span>            and <span
class="attribute">content</span><span> = #{content}  </span></span></li><li><span>        <span class="tag"></</span><span class="tag-name">when</span><span class="tag">></span><span>  </span></span></li><li><span>        <span
class="tag"><</span><span class="tag-name">otherwise</span><span class="tag">></span><span>  </span></span></li><li><span>            and <span class="attribute">owner</span><span> = </span><span
class="attribute-value">"owner1"</span><span>  </span></span></li><li><span>        <span class="tag"></</span><span class="tag-name">otherwise</span><span class="tag">></span><span>  </span></span></li><li><span>    <span
class="tag"></</span><span class="tag-name">choose</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">select</span><span class="tag">></span><span>  </span></span></li></ol></div><pre
name="code" class="xml" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="1" title="MyBatis的动态SQL详解" style="display: none;">
<select id="dynamicChooseTest" parameterType="Blog" resultType="Blog">
select * from t_blog where 1 = 1 
<choose>
<when test="title != null">
and title = #{title}
</when>
<when test="content != null">
and content = #{content}
</when>
<otherwise>
and owner = "owner1"
</otherwise>
</choose>
</select></pre>

</div>

<div>when元素表示当when中的条件满足的时候就输出其中的内容,跟JAVA中的switch效果差不多的是按照条件的顺序,当when中有条件满足的时候,就会跳出choose,即所有的when和otherwise条件中,只有一个会输出,当所有的我很条件都不满足的时候就输出otherwise中的内容。所以上述语句的意思非常简单, 当title!=null的时候就输出and titlte = #{title},不再往下判断条件,当title为空且content!=null的时候就输出and content =
#{content},当所有条件都不满足的时候就输出otherwise中的内容。</div>

<div> </div>

<div>

<strong>where</strong>语句的作用主要是简化SQL语句中where中的条件判断的,先看一个例子,再解释一下where的好处。</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Xml代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%3Cselect%20id%3D%22dynamicWhereTest%22%
20000
20parameterType%3D%22Blog%22%20resultType%3D%22Blog%22%3E%0A%09%09select%20*%20from%20t_blog%20%0A%09%09%3Cwhere%3E%0A%09%09%09%3Cif%20test%3D%22title%20!%3D%20null%22%3E%0A%09%09%09%09title%20%3D%20%23%7Btitle%7D%0A%09%09%09%3C%2Fif%3E%0A%09%09%09%3Cif%20test%3D%22content%20!%3D%20null%22%3E%0A%09%09%09%09and%20content%20%3D%20%23%7Bcontent%7D%0A%09%09%09%3C%2Fif%3E%0A%09%09%09%3Cif%20test%3D%22owner%20!%3D%20null%22%3E%0A%09%09%09%09and%20owner%20%3D%20%23%7Bowner%7D%0A%09%09%09%3C%2Fif%3E%0A%09%09%3C%2Fwhere%3E%0A%09%3C%2Fselect%3E%0A"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-xml"><li><span><span class="tag"><</span><span class="tag-name">select</span><span> </span><span class="attribute">id</span><span>=</span><span
class="attribute-value">"dynamicWhereTest"</span><span> </span><span class="attribute">parameterType</span><span>=</span><span class="attribute-value">"Blog"</span><span> </span><span class="attribute">resultType</span><span>=</span><span class="attribute-value">"Blog"</span><span
class="tag">></span><span>  </span></span></li><li><span>    select * from t_blog   </span></li><li><span>    <span class="tag"><</span><span class="tag-name">where</span><span
class="tag">></span><span>  </span></span></li><li><span>        <span class="tag"><</span><span class="tag-name">if</span><span> </span><span class="attribute">test</span><span>=</span><span class="attribute-value">"title != null"</span><span
class="tag">></span><span>  </span></span></li><li><span>            <span class="attribute">title</span><span> = #{title}  </span></span></li><li><span>        <span
class="tag"></</span><span class="tag-name">if</span><span class="tag">></span><span>  </span></span></li><li><span>        <span class="tag"><</span><span class="tag-name">if</span><span> </span><span
class="attribute">test</span><span>=</span><span class="attribute-value">"content != null"</span><span class="tag">></span><span>  </span></span></li><li><span>            and <span
class="attribute">content</span><span> = #{content}  </span></span></li><li><span>        <span class="tag"></</span><span class="tag-name">if</span><span class="tag">></span><span>  </span></span></li><li><span>        <span
class="tag"><</span><span class="tag-name">if</span><span> </span><span class="attribute">test</span><span>=</span><span class="attribute-value">"owner != null"</span><span class="tag">></span><span>  </span></span></li><li><span>            and <span
class="attribute">owner</span><span> = #{owner}  </span></span></li><li><span>        <span class="tag"></</span><span class="tag-name">if</span><span class="tag">></span><span>  </span></span></li><li><span>    <span
class="tag"></</span><span class="tag-name">where</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">select</span><span class="tag">></span><span>  </span></span></li></ol></div><pre
name="code" class="xml" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="2" title="MyBatis的动态SQL详解" style="display: none;">
<select id="dynamicWhereTest" parameterType="Blog" resultType="Blog">
select * from t_blog 
<where>
<if test="title != null">
title = #{title}
</if>
<if test="content != null">
and content = #{content}
</if>
<if test="owner != null">
and owner = #{owner}
</if>
</where>
</select>

</pre>

</div>

<div> where元素的作用是会在写入where元素的地方输出一个where,另外一个好处是你不需要考虑where元素里面的条件输出是什么样子的,MyBatis会智能的帮你处理,如果所有的条件都不满足那么MyBatis就会查出所有的记录,如果输出后是and 开头的,MyBatis会把第一个and忽略,当然如果是or开头的,MyBatis也会把它忽略;此外,在where元素中你不需要考虑空格的问题,MyBatis会智能的帮你加上。像上述例子中,如果title=null, 而content != null,那么输出的整个语句会是select
* from t_blog where content = #{content},而不是select * from t_blog where and content = #{content},因为MyBatis会智能的把首个and 或 or 给忽略。</div>

<div> </div>

<div>

<strong>trim</strong>元素的主要功能是可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是prefix和suffix;可以把包含内容的首部某些内容覆盖,即忽略,也可以把尾部的某些内容覆盖,对应的属性是prefixOverrides和suffixOverrides;正因为trim有这样的功能,所以我们也可以非常简单的利用trim来代替where元素的功能,示例代码如下:</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Xml代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%3Cselect%20id%3D%22dynamicTrimTest%22%20parameterType%3D%22Blog%22%20resultType%3D%22Blog%22%3E%0A%09%09select%20*%20from%20t_blog%20%0A%09%09%3Ctrim%20prefix%3D%22where%22%20prefixOverrides%3D%22and%20%7Cor%22%3E%0A%09%09%09%3Cif%20test%3D%22title%20!%3D%20null%22%3E%0A%09%09%09%09title%20%3D%20%23%7Btitle%7D%0A%09%09%09%3C%2Fif%3E%0A%09%09%09%3Cif%20test%3D%22content%20!%3D%20null%22%3E%0A%09%09%09%09and%20content%20%3D%20%23%7Bcontent%7D%0A%09%09%09%3C%2Fif%3E%0A%09%09%09%3Cif%20test%3D%22owner%20!%3D%20null%22%3E%0A%09%09%09%09or%20owner%20%3D%20%23%7Bowner%7D%0A%09%09%09%3C%2Fif%3E%0A%09%09%3C%2Ftrim%3E%0A%09%3C%2Fselect%3E"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-xml"><li><span><span class="tag"><</span><span class="tag-name">select</span><span> </span><span class="attribute">id</span><span>=</span><span
class="attribute-value">"dynamicTrimTest"</span><span> </span><span class="attribute">parameterType</span><span>=</span><span class="attribute-value">"Blog"</span><span> </span><span class="attribute">resultType</span><span>=</span><span class="attribute-value">"Blog"</span><span
class="tag">></span><span>  </span></span></li><li><span>    select * from t_blog   </span></li><li><span>    <span class="tag"><</span><span class="tag-name">trim</span><span> </span><span
class="attribute">prefix</span><span>=</span><span class="attribute-value">"where"</span><span> </span><span class="attribute">prefixOverrides</span><span>=</span><span class="attribute-value">"and |or"</span><span class="tag">></span><span>  </span></span></li><li><span>        <span
class="tag"><</span><span class="tag-name">if</span><span> </span><span class="attribute">test</span><span>=</span><span class="attribute-value">"title != null"</span><span class="tag">></span><span>  </span></span></li><li><span>            <span
class="attribute">title</span><span> = #{title}  </span></span></li><li><span>        <span class="tag"></</span><span class="tag-name">if</span><span class="tag">></span><span>  </span></span></li><li><span>        <span
class="tag"><</span><span class="tag-name">if</span><span> </span><span class="attribute">test</span><span>=</span><span class="attribute-value">"content != null"</span><span class="tag">></span><span>  </span></span></li><li><span>            and <span
class="attribute">content</span><span> = #{content}  </span></span></li><li><span>        <span class="tag"></</span><span class="tag-name">if</span><span class="tag">></span><span>  </span></span></li><li><span>        <span
class="tag"><</span><span class="tag-name">if</span><span> </span><span class="attribute">test</span><span>=</span><span class="attribute-value">"owner != null"</span><span class="tag">></span><span>  </span></span></li><li><span>            or <span
class="attribute">owner</span><span> = #{owner}  </span></span></li><li><span>        <span class="tag"></</span><span class="tag-name">if</span><span class="tag">></span><span>  </span></span></li><li><span>    <span
class="tag"></</span><span class="tag-name">trim</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">select</span><span class="tag">></span><span>  </span></span></li></ol></div><pre
name="code" class="xml" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="3" title="MyBatis的动态SQL详解" style="display: none;">
<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></pre>

</div>

<div> </div>

<div>

<strong>set</strong>元素主要是用在更新操作的时候,它的主要功能和where元素其实是差不多的,主要是在包含的语句前输出一个set,然后如果包含的语句是以逗号结束的话将会把该逗号忽略,如果set包含的内容为空的话则会出错。有了set元素我们就可以动态的更新那些修改了的字段。下面是一段示例代码:</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Xml代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%3Cupdate%20id%3D%22dynamicSetTest%22%20parameterType%3D%22Blog%22%3E%0A%09%09update%20t_blog%0A%09%09%3Cset%3E%0A%09%09%09%3Cif%20test%3D%22title%20!%3D%20null%22%3E%0A%09%09%09%09title%20%3D%20%23%7Btitle%7D%2C%0A%09%09%09%3C%2Fif%3E%0A%09%09%09%3Cif%20test%3D%22content%20!%3D%20null%22%3E%0A%09%09%09%09content%20%3D%20%23%7Bcontent%7D%2C%0A%09%09%09%3C%2Fif%3E%0A%09%09%09%3Cif%20test%3D%22owner%20!%3D%20null%22%3E%0A%09%09%09%09owner%20%3D%20%23%7Bowner%7D%0A%09%09%09%3C%2Fif%3E%0A%09%09%3C%2Fset%3E%0A%09%09where%20id%20%3D%20%23%7Bid%7D%0A%09%3C%2Fupdate%3E"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-xml"><li><span><span class="tag"><</span><span class="tag-name">update</span><span> </span><span class="attribute">id</span><span>=</span><span
class="attribute-value">"dynamicSetTest"</span><span> </span><span class="attribute">parameterType</span><span>=</span><span class="attribute-value">"Blog"</span><span class="tag">></span><span>  </span></span></li><li><span>    update t_blog  </span></li><li><span>    <span
class="tag"><</span><span class="tag-name">set</span><span class="tag">></span><span>  </span></span></li><li><span>        <span class="tag"><</span><span class="tag-name">if</span><span> </span><span
class="attribute">test</span><span>=</span><span class="attribute-value">"title != null"</span><span class="tag">></span><span>  </span></span></li><li><span>            <span
class="attribute">title</span><span> = #{title},  </span></span></li><li><span>        <span class="tag"></</span><span class="tag-name">if</span><span class="tag">></span><span>  </span></span></li><li><span>        <span
class="tag"><</span><span class="tag-name">if</span><span> </span><span class="attribute">test</span><span>=</span><span class="attribute-value">"content != null"</span><span class="tag">></span><span>  </span></span></li><li><span>            <span
class="attribute">content</span><span> = #{content},  </span></span></li><li><span>        <span class="tag"></</span><span class="tag-name">if</span><span class="tag">></span><span>  </span></span></li><li><span>        <span
class="tag"><</span><span class="tag-name">if</span><span> </span><span class="attribute">test</span><span>=</span><span class="attribute-value">"owner != null"</span><span class="tag">></span><span>  </span></span></li><li><span>            <span
class="attribute">owner</span><span> = #{owner}  </span></span></li><li><span>        <span class="tag"></</span><span class="tag-name">if</span><span class="tag">></span><span>  </span></span></li><li><span>    <span
class="tag"></</span><span class="tag-name">set</span><span class="tag">></span><span>  </span></span></li><li><span>    where <span class="attribute">id</span><span> = #{id}  </span></span></li><li><span><span
class="tag"></</span><span class="tag-name">update</span><span class="tag">></span><span>  </span></span></li></ol></div><pre name="code" class="xml" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#"
pre_index="4" title="MyBatis的动态SQL详解" style="display: none;">
<update id="dynamicSetTest" parameterType="Blog">
update t_blog
<set>
<if test="title != null">
title = #{title},
</if>
<if test="content != null">
content = #{content},
</if>
<if test="owner != null">
owner = #{owner}
</if>
</set>
where id = #{id}
</update></pre>

</div>

<div> 上述示例代码中,如果set中一个条件都不满足,即set中包含的内容为空的时候就会报错。</div>

<div> </div>

<div>

<strong>foreach</strong>的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:</div>

<div>

<ol>

<li>如果传入的是单参数且参数类型是一个List的时候,collection属性值为list</li>

<li>如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array</li>

<li>如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,<strong>当然单参数也可以封装成map</strong>,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key</li>

</ol>

<div>下面分别来看看上述三种情况的示例代码:</div>

<div>1.单参数List的类型:</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Xml代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%3Cselect%20id%3D%22dynamicForeachTest%22%20resultType%3D%22Blog%22%3E%0A%09%09select%20*%20from%20t_blog%20where%20id%20in%0A%09%09%3Cforeach%20collection%3D%22list%22%20index%3D%22index%22%20item%3D%22item%22%20open%3D%22(%22%20separator%3D%22%2C%22%20close%3D%22)%22%3E%0A%09%09%09%23%7Bitem%7D%0A%09%09%3C%2Fforeach%3E%0A%09%3C%2Fselect%3E"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-xml"><li><span><span class="tag"><</span><span class="tag-name">select</span><span> </span><span class="attribute">id</span><span>=</span><span
class="attribute-value">"dynamicForeachTest"</span><span> </span><span class="attribute">resultType</span><span>=</span><span class="attribute-value">"Blog"</span><span class="tag">></span><span>  </span></span></li><li><span>    select * from t_blog where id in  </span></li><li><span>    <span
class="tag"><</span><span class="tag-name">foreach</span><span> </span><span class="attribute">collection</span><span>=</span><span class="attribute-value">"list"</span><span> </span><span class="attribute">index</span><span>=</span><span class="attribute-value">"index"</span><span> </span><span
class="attribute">item</span><span>=</span><span class="attribute-value">"item"</span><span> </span><span class="attribute">open</span><span>=</span><span class="attribute-value">"("</span><span> </span><span class="attribute">separator</span><span>=</span><span
class="attribute-value">","</span><span> </span><span class="attribute">close</span><span>=</span><span class="attribute-value">")"</span><span class="tag">></span><span>  </span></span></li><li><span>        #{item}  </span></li><li><span>    <span
class="tag"></</span><span class="tag-name">foreach</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">select</span><span class="tag">></span><span>  </span></span></li></ol></div><pre
name="code" class="xml" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="5" title="MyBatis的动态SQL详解" style="display: none;">
<select id="dynamicForeachTest" resultType="Blog">
select * from t_blog where id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select></pre>

</div>

<div> 上述collection的值为list,对应的Mapper是这样的</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=public%20List%3CBlog%3E%20dynamicForeachTest(List%3CInteger%3E%20ids)%3B"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span class="keyword">public</span><span> List<Blog> dynamicForeachTest(List<Integer> ids);  </span></span></li></ol></div><pre
name="code" class="java" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="6" title="MyBatis的动态SQL详解" style="display: none;">public List<Blog> dynamicForeachTest(List<Integer> ids);</pre>

</div>

<div> 测试代码:</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%40Test%0A%09public%20void%20dynamicForeachTest()%20%7B%0A%09%09SqlSession%20session%20%3D%20Util.getSqlSessionFactory().openSession()%3B%0A%09%09BlogMapper%20blogMapper%20%3D%20session.getMapper(BlogMapper.class)%3B%0A%09%09List%3CInteger%3E%20ids%20%3D%20new%20ArrayList%3CInteger%3E()%3B%0A%09%09ids.add(1)%3B%0A%09%09ids.add(3)%3B%0A%09%09ids.add(6)%3B%0A%09%09List%3CBlog%3E%20blogs%20%3D%20blogMapper.dynamicForeachTest(ids)%3B%0A%09%09for%20(Blog%20blog%20%3A%20blogs)%0A%09%09%09System.out.println(blog)%3B%0A%09%09session.close()%3B%0A%09%7D"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span class="annotation">@Test</span><span>  </span></span></li><li><span><span class="keyword">public</span><span> </span><span
class="keyword">void</span><span> dynamicForeachTest() {  </span></span></li><li><span>    SqlSession session = Util.getSqlSessionFactory().openSession();  </span></li><li><span>    BlogMapper blogMapper = session.getMapper(BlogMapper.<span
class="keyword">class</span><span>);  </span></span></li><li><span>    List<Integer> ids = <span class="keyword">new</span><span> ArrayList<Integer>();  </span></span></li><li><span>    ids.add(<span
class="number">1</span><span>);  </span></span></li><li><span>    ids.add(<span class="number">3</span><span>);  </span></span></li><li><span>    ids.add(<span class="number">6</span><span>);  </span></span></li><li><span>    List<Blog> blogs = blogMapper.dynamicForeachTest(ids);  </span></li><li><span>    <span
class="keyword">for</span><span> (Blog blog : blogs)  </span></span></li><li><span>        System.out.println(blog);  </span></li><li><span>    session.close();  </span></li><li><span>}  </span></li></ol></div><pre
name="code" class="java" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="7" title="MyBatis的动态SQL详解" style="display: none;">
@Test
public void dynamicForeachTest() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(3);
ids.add(6);
List<Blog> blogs = blogMapper.dynamicForeachTest(ids);
for (Blog blog : blogs)
System.out.println(blog);
session.close();
}</pre>

</div>

<div> </div>

<div>2.单参数array数组的类型:</div>

</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Xml代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%3Cselect%20id%3D%22dynamicForeach2Test%22%20resultType%3D%22Blog%22%3E%0A%09%09select%20*%20from%20t_blog%20where%20id%20in%0A%09%09%3Cforeach%20collection%3D%22array%22%20index%3D%22index%22%20item%3D%22item%22%20open%3D%22(%22%20separator%3D%22%2C%22%20close%3D%22)%22%3E%0A%09%09%09%23%7Bitem%7D%0A%09%09%3C%2Fforeach%3E%0A%09%3C%2Fselect%3E%0A"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-xml"><li><span><span class="tag"><</span><span class="tag-name">select</span><span> </span><span class="attribute">id</span><span>=</span><span
class="attribute-value">"dynamicForeach2Test"</span><span> </span><span class="attribute">resultType</span><span>=</span><span class="attribute-value">"Blog"</span><span class="tag">></span><span>  </span></span></li><li><span>    select * from t_blog where id in  </span></li><li><span>    <span
class="tag"><</span><span class="tag-name">foreach</span><span> </span><span class="attribute">collection</span><span>=</span><span class="attribute-value">"array"</span><span> </span><span class="attribute">index</span><span>=</span><span class="attribute-value">"index"</span><span> </span><span
class="attribute">item</span><span>=</span><span class="attribute-value">"item"</span><span> </span><span class="attribute">open</span><span>=</span><span class="attribute-value">"("</span><span> </span><span class="attribute">separator</span><span>=</span><span
class="attribute-value">","</span><span> </span><span class="attribute">close</span><span>=</span><span class="attribute-value">")"</span><span class="tag">></span><span>  </span></span></li><li><span>        #{item}  </span></li><li><span>    <span
class="tag"></</span><span class="tag-name">foreach</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">select</span><span class="tag">></span><span>  </span></span></li></ol></div><pre
name="code" class="xml" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="8" title="MyBatis的动态SQL详解" style="display: none;">
<select id="dynamicForeach2Test" resultType="Blog">
select * from t_blog where id in
<foreach collection="array" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>

</pre>

</div>

<div> 上述collection为array,对应的Mapper代码:</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=public%20List%3CBlog%3E%20dynamicForeach2Test(int%5B%5D%20ids)%3B"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span class="keyword">public</span><span> List<Blog> dynamicForeach2Test(</span><span
class="keyword">int</span><span>[] ids);  </span></span></li></ol></div><pre name="code" class="java" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="9" title="MyBatis的动态SQL详解" style="display:
none;">public List<Blog> dynamicForeach2Test(int[] ids);</pre>

</div>

<div> 对应的测试代码:</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%40Test%0A%09public%20void%20dynamicForeach2Test()%20%7B%0A%09%09SqlSession%20session%20%3D%20Util.getSqlSessionFactory().openSession()%3B%0A%09%09BlogMapper%20blogMapper%20%3D%20session.getMapper(BlogMapper.class)%3B%0A%09%09int%5B%5D%20ids%20%3D%20new%20int%5B%5D%20%7B1%2C3%2C6%2C9%7D%3B%0A%09%09List%3CBlog%3E%20blogs%20%3D%20blogMapper.dynamicForeach2Test(ids)%3B%0A%09%09for%20(Blog%20blog%20%3A%20blogs)%0A%09%09%09System.out.println(blog)%3B%0A%09%09session.close()%3B%0A%09%7D"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span class="annotation">@Test</span><span>  </span></span></li><li><span><span class="keyword">public</span><span> </span><span
class="keyword">void</span><span> dynamicForeach2Test() {  </span></span></li><li><span>    SqlSession session = Util.getSqlSessionFactory().openSession();  </span></li><li><span>    BlogMapper blogMapper = session.getMapper(BlogMapper.<span
class="keyword">class</span><span>);  </span></span></li><li><span>    <span class="keyword">int</span><span>[] ids = </span><span class="keyword">new</span><span> </span><span class="keyword">int</span><span>[] {</span><span
class="number">1</span><span>,</span><span class="number">3</span><span>,</span><span class="number">6</span><span>,</span><span class="number">9</span><span>};  </span></span></li><li><span>    List<Blog> blogs = blogMapper.dynamicForeach2Test(ids);  </span></li><li><span>    <span
class="keyword">for</span><span> (Blog blog : blogs)  </span></span></li><li><span>        System.out.println(blog);  </span></li><li><span>    session.close();  </span></li><li><span>}  </span></li></ol></div><pre
name="code" class="java" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="10" title="MyBatis的动态SQL详解" style="display: none;">
@Test
public void dynamicForeach2Test() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
int[] ids = new int[] {1,3,6,9};
List<Blog> blogs = blogMapper.dynamicForeach2Test(ids);
for (Blog blog : blogs)
System.out.println(blog);
session.close();
}</pre>

</div>

<div> </div>

<div>3.自己把参数封装成Map的类型</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Xml代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%3Cselect%20id%3D%22dynamicForeach3Test%22%20resultType%3D%22Blog%22%3E%0A%09%09select%20*%20from%20t_blog%20where%20title%20like%20%22%25%22%23%7Btitle%7D%22%25%22%20and%20id%20in%0A%09%09%3Cforeach%20collection%3D%22ids%22%20index%3D%22index%22%20item%3D%22item%22%20open%3D%22(%22%20separator%3D%22%2C%22%20close%3D%22)%22%3E%0A%09%09%09%23%7Bitem%7D%0A%09%09%3C%2Fforeach%3E%0A%09%3C%2Fselect%3E"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-xml"><li><span><span class="tag"><</span><span class="tag-name">select</span><span> </span><span class="attribute">id</span><span>=</span><span
class="attribute-value">"dynamicForeach3Test"</span><span> </span><span class="attribute">resultType</span><span>=</span><span class="attribute-value">"Blog"</span><span class="tag">></span><span>  </span></span></li><li><span>    select * from t_blog where title like "%"#{title}"%" and id in  </span></li><li><span>    <span
class="tag"><</span><span class="tag-name">foreach</span><span> </span><span class="attribute">collection</span><span>=</span><span class="attribute-value">"ids"</span><span> </span><span class="attribute">index</span><span>=</span><span class="attribute-value">"index"</span><span> </span><span
class="attribute">item</span><span>=</span><span class="attribute-value">"item"</span><span> </span><span class="attribute">open</span><span>=</span><span class="attribute-value">"("</span><span> </span><span class="attribute">separator</span><span>=</span><span
class="attribute-value">","</span><span> </span><span class="attribute">close</span><span>=</span><span class="attribute-value">")"</span><span class="tag">></span><span>  </span></span></li><li><span>        #{item}  </span></li><li><span>    <span
class="tag"></</span><span class="tag-name">foreach</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">select</span><span class="tag">></span><span>  </span></span></li></ol></div><pre
name="code" class="xml" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="11" title="MyBatis的动态SQL详解" style="display: none;">
<select id="dynamicForeach3Test" resultType="Blog">
select * from t_blog where title like "%"#{title}"%" and id in
<foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select></pre>

</div>

<div>上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:</div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=public%20List%3CBlog%3E%20dynamicForeach3Test(Map%3CString%2C%20Object%3E%20params)%3B"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span class="keyword">public</span><span> List<Blog> dynamicForeach3Test(Map<String, Object> params);  </span></span></li></ol></div><pre
name="code" class="java" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="12" title="MyBatis的动态SQL详解" style="display: none;">public List<Blog> dynamicForeach3Test(Map<String, Object> params);</pre>

<div>  对应测试代码:</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%40Test%0A%09public%20void%20dynamicForeach3Test()%20%7B%0A%09%09SqlSession%20session%20%3D%20Util.getSqlSessionFactory().openSession()%3B%0A%09%09BlogMapper%20blogMapper%20%3D%20session.getMapper(BlogMapper.class)%3B%0A%09%09final%20List%3CInteger%3E%20ids%20%3D%20new%20ArrayList%3CInteger%3E()%3B%0A%09%09ids.add(1)%3B%0A%09%09ids.add(2)%3B%0A%09%09ids.add(3)%3B%0A%09%09ids.add(6)%3B%0A%09%09ids.add(7)%3B%0A%09%09ids.add(9)%3B%0A%09%09Map%3CString%2C%20Object%3E%20params%20%3D%20new%20HashMap%3CString%2C%20Object%3E()%3B%0A%09%09params.put(%22ids%22%2C%20ids)%3B%0A%09%09params.put(%22title%22%2C%20%22%E4%B8%AD%E5%9B%BD%22)%3B%0A%09%09List%3CBlog%3E%20blogs%20%3D%20blogMapper.dynamicForeach3Test(params)%3B%0A%09%09for%20(Blog%20blog%20%3A%20blogs)%0A%09%09%09System.out.println(blog)%3B%0A%09%09session.close()%3B%0A%09%7D%0A"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span class="annotation">@Test</span><span>  </span></span></li><li><span><span class="keyword">public</span><span> </span><span
class="keyword">void</span><span> dynamicForeach3Test() {  </span></span></li><li><span>    SqlSession session = Util.getSqlSessionFactory().openSession();  </span></li><li><span>    BlogMapper blogMapper = session.getMapper(BlogMapper.<span
class="keyword">class</span><span>);  </span></span></li><li><span>    <span class="keyword">final</span><span> List<Integer> ids = </span><span class="keyword">new</span><span> ArrayList<Integer>();  </span></span></li><li><span>    ids.add(<span
class="number">1</span><span>);  </span></span></li><li><span>    ids.add(<span class="number">2</span><span>);  </span></span></li><li><span>    ids.add(<span class="number">3</span><span>);  </span></span></li><li><span>    ids.add(<span
class="number">6</span><span>);  </span></span></li><li><span>    ids.add(<span class="number">7</span><span>);  </span></span></li><li><span>    ids.add(<span class="number">9</span><span>);  </span></span></li><li><span>    Map<String, Object> params = <span
class="keyword">new</span><span> HashMap<String, Object>();  </span></span></li><li><span>    params.put(<span class="string">"ids"</span><span>, ids);  </span></span></li><li><span>    params.put(<span
class="string">"title"</span><span>, </span><span class="string">"中国"</span><span>);  </span></span></li><li><span>    List<Blog> blogs = blogMapper.dynamicForeach3Test(params);  </span></li><li><span>    <span
class="keyword">for</span><span> (Blog blog : blogs)  </span></span></li><li><span>        System.out.println(blog);  </span></li><li><span>    session.close();  </span></li><li><span>}  </span></li></ol></div><pre
name="code" class="java" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="13" title="MyBatis的动态SQL详解" style="display: none;">
@Test
public void dynamicForeach3Test() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
final List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(2);
ids.add(3);
ids.add(6);
ids.add(7);
ids.add(9);
Map<String, Object> params = new HashMap<String, Object>();
params.put("ids", ids);
params.put("title", "中国");
List<Blog> blogs = blogMapper.dynamicForeach3Test(params);
for (Blog blog : blogs)
System.out.println(blog);
session.close();
}

</pre>

 </div>

<div> </div>

<div>基础部分可以查看我的另一篇博客:<a href="/blog/1333271">http://haohaoxuexi.iteye.com/blog/1333271</a>

</div>

<div>

<h3>基于3.3.1版本验证的新特性</h3>

</div>

<div> 本文是基于Mybatis 3.0.6版本所写,笔者最近在查看新版Mybatis(3.3.1)时发现其对动态SQL的支持较以前的3.0.6版本的区别不大,基本一致,但笔者还是发现有以下新特性:</div>

<div>1、foreach标签遍历的集合元素类型是Map.Entry类型时,index属性指定的变量代表对应的Map.Entry的key,item属性指定的变量代表对应的Map.Entry的value。此时如果对应的集合是Map.entrySet,则对应的collection属性用collection。foreach在进行遍历的时候如果传入的参数是List类型,则其collection属性的值可以是list或collection,但如果传入的参数是Set类型,则collection属性的值只能用collection。</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Xml代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%3Cselect%20id%3D%22dynamicForeachTest%22%20resultType%3D%22Blog%22%3E%0A%09%09select%20*%20from%20t_blog%20where%20id%20in%0A%09%09%3C!--%20%E9%81%8D%E5%8E%86%E7%9A%84%E5%AF%B9%E8%B1%A1%E6%98%AFMap.Entry%E6%97%B6%EF%BC%8Cindex%E4%BB%A3%E8%A1%A8%E5%AF%B9%E5%BA%94%E7%9A%84key%EF%BC%8Citem%E4%BB%A3%E8%A1%A8%E5%AF%B9%E5%BA%94%E7%9A%84value%20--%3E%0A%09%09%3Cforeach%20collection%3D%22collection%22%20index%3D%22key%22%20item%3D%22value%22%20open%3D%22(%22%20separator%3D%22%2C%22%20close%3D%22)%22%3E%0A%09%09%09%23%7Bkey%7D%2C%20%23%7Bvalue%7D%0A%09%09%3C%2Fforeach%3E%0A%09%3C%2Fselect%3E"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-xml"><li><span><span class="tag"><</span><span class="tag-name">select</span><span> </span><span class="attribute">id</span><span>=</span><span
class="attribute-value">"dynamicForeachTest"</span><span> </span><span class="attribute">resultType</span><span>=</span><span class="attribute-value">"Blog"</span><span class="tag">></span><span>  </span></span></li><li><span>    select * from t_blog where id in  </span></li><li><span>    <span
class="comments"><!-- 遍历的对象是Map.Entry时,index代表对应的key,item代表对应的value --></span><span>  </span></span></li><li><span>    <span class="tag"><</span><span class="tag-name">foreach</span><span> </span><span
class="attribute">collection</span><span>=</span><span class="attribute-value">"collection"</span><span> </span><span class="attribute">index</span><span>=</span><span class="attribute-value">"key"</span><span> </span><span class="attribute">item</span><span>=</span><span
class="attribute-value">"value"</span><span> </span><span class="attribute">open</span><span>=</span><span class="attribute-value">"("</span><span> </span><span class="attribute">separator</span><span>=</span><span class="attribute-value">","</span><span> </span><span
class="attribute">close</span><span>=</span><span class="attribute-value">")"</span><span class="tag">></span><span>  </span></span></li><li><span>        #{key}, #{value}  </span></li><li><span>    <span
class="tag"></</span><span class="tag-name">foreach</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">select</span><span class="tag">></span><span>  </span></span></li></ol></div><pre
name="code" class="xml" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="14" title="MyBatis的动态SQL详解" style="display: none;">
<select id="dynamicForeachTest" resultType="Blog">
select * from t_blog where id in
<!-- 遍历的对象是Map.Entry时,index代表对应的key,item代表对应的value -->
<foreach collection="collection" index="key" item="value" open="(" separator="," close=")">
#{key}, #{value}
</foreach>
</select></pre>

 其对应的接口方法大概是如下这样:</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%20%20%20%20public%20List%3CBlog%3E%20dynamicForeachTest(Set%3CMap.Entry%3CInteger%2C%20Integer%3E%3E%20ids)%3B%0A"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span class="keyword">public</span><span> List<Blog> dynamicForeachTest(Set<Map.Entry<Integer, Integer>> ids);  </span></span></li></ol></div><pre
name="code" class="java" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#" pre_index="15" title="MyBatis的动态SQL详解" style="display: none;">    public List<Blog> dynamicForeachTest(Set<Map.Entry<Integer, Integer>>
ids);

</pre>

 </div>

<div>2、<strong>bind</strong>标签,动态SQL中已经包含了这样一个新的标签,它的功能是在当前OGNL上下文中创建一个变量并绑定一个值。有了它以后我们以前的模糊查询就可以改成这个样子:</div>

<div>

<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Xml代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%20%20%20%20%3Cselect%20id%3D%22fuzzyQuery%22%20resultType%3D%22Blog%22%20parameterType%3D%22java.lang.String%22%3E%20%20%0A%20%20%20%20%09%3C!--%20bind%E6%A0%87%E7%AD%BE%E7%94%A8%E4%BA%8E%E5%88%9B%E5%BB%BA%E6%96%B0%E7%9A%84%E5%8F%98%E9%87%8F%20--%3E%0A%09%09%3Cbind%20name%3D%22titleLike%22%20value%3D%22'%25'%2B_parameter%2B'%25'%22%2F%3E%0A%20%20%20%20%20%20%20%20select%20*%20from%20t_blog%20where%20title%20like%20%23%7BtitleLike%7D%20%20%0A%20%20%20%20%3C%2Fselect%3E"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-xml"><li><span><span>  </span><span class="tag"><</span><span class="tag-name">select</span><span> </span><span
class="attribute">id</span><span>=</span><span class="attribute-value">"fuzzyQuery"</span><span> </span><span class="attribute">resultType</span><span>=</span><span class="attribute-value">"Blog"</span><span> </span><span class="attribute">parameterType</span><span>=</span><span
class="attribute-value">"java.lang.String"</span><span class="tag">></span><span>    </span></span></li><li><span>    <span class="comments"><!-- bind标签用于创建新的变量 --></span><span>  </span></span></li><li><span><span
class="tag"><</span><span class="tag-name">bind</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"titleLike"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"'%'+_parameter+'%'"</span><span
class="tag">/></span><span>  </span></span></li><li><span>      select * from t_blog where title like #{titleLike}    </span></li><li><span>  <span
class="tag"></</span><span class="tag-name">select</span><span class="tag">></span><span>  </span></span></li></ol></div><pre name="code" class="xml" codeable_id="" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#"
pre_index="16" title="MyBatis的动态SQL详解" style="display: none;">    <select id="fuzzyQuery" resultType="Blog" parameterType="java.lang.String">  

    <!-- bind标签用于创建新的变量 -->
<bind name="titleLike" value="'%'+_parameter+'%'"/>

        select * from t_blog where title like #{titleLike}  

    </select></pre>

  </div>

<div> </div>

<div> </div>

<div> </div>

<div> </div>

<div> </div>

<div> </div>

<div> </div>

<div> </div>

<div> </div>

<div> </div>

</div>

  </div>

  

  

  <ins data-revive-zoneid="201" data-revive-id="8c38e720de1c90a6f6ff52f3f89c4d57"></ins>

  

  <div id="bottoms" class="clearfix">

    <div id="digg_bottom" class="clearfix"><div class="digged"><strong>43</strong> <br>顶</div><div class="digged"><strong>5</strong> <br>踩</div></div>

    <div id="share_weibo">分享到:

      <a data-type="sina" href="javascript:;" title="分享到新浪微博"><img src="/images/sina.jpg"></a>

      <a data-type="qq" href="javascript:;" title="分享到腾讯微博"><img src="/images/tec.jpg"></a>

    </div>

  </div>

  <div class="blog_nav">

    <div class="pre_next">

      <a href="/blog/1343761" class="next" title="基于注解的SpringMVC简单介绍">基于注解的SpringMVC简单介绍</a>

      |

      <a href="/blog/1337009" class="pre" title="MyBatis之ResultMap简介,关联对象">MyBatis之ResultMap简介,关联对象</a>

    </div>

  </div>

  <div class="blog_bottom">

    <ul>

      <li>2012-01-09 12:08</li>

      <li>浏览 171212</li>

      <li><a href="#comments">评论(13)</a></li>

      

      

      <li>分类:<a href="http://www.iteye.com/blogs/category/language">编程语言</a></li>      

      <li class="last"><a href="http://www.iteye.com/wiki/blog/1338557" target="_blank" class="more">相关推荐</a></li>

    </ul>    

  </div>

  
   

<div class="boutique-curr-box blog_comment">
 <div class="boutique-curr clearfix">
   <h5 class="h3titles">参考知识库</h5>
   
   <dl class="dlnewlist">
   

          <dd><a target="_blank" href="http://lib.csdn.net/base/ai"><img src="http://img.knowledge.csdn.net/upload/base/1479972981201_201.jpg" width="58" height="58" alt=""></a></dd>

          <dt>

              <a target="_blank" href="http://lib.csdn.net/base/ai" classs="title">人工智能知识库</a>

              <span>

                 <em>4740</em>  关注 <i>|</i> <em>410</em>  收录                  

              </span>

          </dt>

      
   </dl>
   
   <dl class="dlnewlist">
   

          <dd><a target="_blank" href="http://lib.csdn.net/base/mongodb"><img src="http://img.knowledge.csdn.net/upload/base/1478676229520_520.jpg" width="58" height="58" alt=""></a></dd>

          <dt>

              <a target="_blank" href="http://lib.csdn.net/base/mongodb" classs="title">MongoDB知识库</a>

              <span>

                 <em>5620</em>  关注 <i>|</i> <em>336</em>  收录                  

              </span>

          </dt>

      
   </dl>
   
   <dl class="dlnewlist">
   

          <dd><a target="_blank" href="http://lib.csdn.net/base/hbase"><img src="http://img.knowledge.csdn.net/upload/base/1479363734443_443.jpg" width="58" height="58" alt=""></a></dd>

          <dt>

              <a target="_blank" href="http://lib.csdn.net/base/hbase" classs="title">Hbase知识库</a>

              <span>

                 <em>6472</em>  关注 <i>|</i> <em>63</em>  收录                  

              </span>

          </dt>

      
   </dl>
   
   <dl class="dlnewlist">
   

          <dd><a target="_blank" href="http://lib.csdn.net/base/blockchain"><img src="http://img.knowledge.csdn.net/upload/base/1476175342721_721.jpg" width="58" height="58" alt=""></a></dd>

          <dt>

              <a target="_blank" href="http://lib.csdn.net/base/blockchain" classs="title">区块链知识库</a>

              <span>

                 <em>3121</em>  关注 <i>|</i> <em>108</em>  收录                  

              </span>

          </dt>

      
   </dl>
   
 </div>

</div>

 

      

  <div class="blog_comment">

    <h5>评论</h5>

    <a id="comments" name="comments"></a>

    <div id="bc2394641">

  <div class="comment_title">

    13 楼

    <a href="http://563011992.iteye.com" target="_blank" title="吾乃隔壁老王">吾乃隔壁老王</a>

    2016-11-07  

    

    

  </div>

  <div class="comment_content">3Q,问个问题啊,where里的if里,能不能不加and?</div>

</div>

<div id="bc2383373">

  <div class="comment_title">

    12 楼

    <a href="http://yuang.iteye.com" target="_blank" title="yuang">yuang</a>

    2015-12-29  

    

    

  </div>

  <div class="comment_content"><table class="bbcode"><tbody><tr><td><img src="<ul></td></tr><tr><td>[*]</td></tr><tr><td></ul>">" target="_blank"><img src="<ul></td></tr><tr><td>[*]</td></tr><tr><td></ul>">"
/><img src="<ul></td></tr><tr><td>[*]</td></tr><tr><td></ul>">" target="_blank"><img src="<ul></td></tr><tr><td>[*]</td></tr><tr><td></ul>">"
wmode="" quality="high" menu="false" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="200" height="200"></td><td><img src="/images/smiles/icon_surprised.gif"> </td></tr></tbody></table></div>

</div>

<div id="bc2364106">

  <div class="comment_title">

    11 楼

    <a href="http://happymzw.iteye.com" target="_blank" title="happymzw">happymzw</a>

    2014-12-04  

    

    

  </div>

  <div class="comment_content"><div class="quote_title">Syhenian 写道</div><div class="quote_div"><div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14"
height="15" flashvars="clipboard=%3Cupdate%20id%3D%22dynamicSetTest%22%20parameterType%3D%22Blog%22%3E%20%20%0A%20%20%20%20update%20t_blog%20%20%0A%20%20%20%20%3Cset%3E%20%20%0A%20%20%20%20%20%20%20%20%3Cif%20test%3D%22title%20!%3D%20null%22%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20title%20%3D%20%23%7Btitle%7D%2C%20%20%0A%20%20%20%20%20%20%20%20%3C%2Fif%3E%20%20%0A%20%20%20%20%20%20%20%20%3Cif%20test%3D%22content%20!%3D%20null%22%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20content%20%3D%20%23%7Bcontent%7D%2C%20%20%0A%20%20%20%20%20%20%20%20%3C%2Fif%3E%20%20%0A%20%20%20%20%20%20%20%20%3Cif%20test%3D%22owner%20!%3D%20null%22%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20owner%20%3D%20%23%7Bowner%7D%20%20%0A%20%20%20%20%20%20%20%20%3C%2Fif%3E%20%20%0A%20%20%20%20%3C%2Fset%3E%20%20%0A%20%20%20%20where%20id%20%3D%20%23%7Bid%7D%20%20%0A%3C%2Fupdate%3E%20%20"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span><update id=</span><span class="string">"dynamicSetTest"</span><span> parameterType=</span><span
class="string">"Blog"</span><span>>    </span></span></li><li><span>    update t_blog    </span></li><li><span>    <set>    </span></li><li><span>        <<span
class="keyword">if</span><span> test=</span><span class="string">"title != null"</span><span>>    </span></span></li><li><span>            title = #{title},    </span></li><li><span>        </<span
class="keyword">if</span><span>>    </span></span></li><li><span>        <<span class="keyword">if</span><span> test=</span><span class="string">"content != null"</span><span>>    </span></span></li><li><span>            content = #{content},    </span></li><li><span>        </<span
class="keyword">if</span><span>>    </span></span></li><li><span>        <<span class="keyword">if</span><span> test=</span><span class="string">"owner != null"</span><span>>    </span></span></li><li><span>            owner = #{owner}    </span></li><li><span>        </<span
class="keyword">if</span><span>>    </span></span></li><li><span>    </set>    </span></li><li><span>    where id = #{id}    </span></li><li><span></update>    </span></li></ol></div><pre
name="code" class="java" codeable_id="2364106" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#bc2364106" pre_index="0" title="MyBatis的动态SQL详解" style="display: none;"><update id="dynamicSetTest" parameterType="Blog">  

    update t_blog  

    <set>  

        <if test="title != null">  

            title = #{title},  

        </if>  

        <if test="content != null">  

            content = #{content},  

        </if>  

        <if test="owner != null">  

            owner = #{owner}  

        </if>  

    </set>  

    where id = #{id}  

</update>  </pre><br><br>这段可以这样写吗   如果ownner等于null   那语句就是<br><br>update t_blog title= 'title', content='content'<span style="color: red;">,</span>  where id='id'<br><br>多了个红色的逗号不会报错?</div><br><br>楼主说了,set会自动处理掉后面的那个逗号的</div>

</div>

<div id="bc2363317">

  <div class="comment_title">

    10 楼

    <a href="http://1106592119.iteye.com" target="_blank" title="简单就是美了">简单就是美了</a>

    2014-11-20  

    

    

  </div>

  <div class="comment_content"><img src="/images/smiles/icon_idea.gif"> <img src="/images/smiles/icon_idea.gif"> <img src="/images/smiles/icon_idea.gif"> <img src="/images/smiles/icon_idea.gif"> <img src="/images/smiles/icon_idea.gif"> </div>

</div>

<div id="bc2362264">

  <div class="comment_title">

    9 楼

    <a href="http://shiping8000.iteye.com" target="_blank" title="shiping8000">shiping8000</a>

    2014-11-06  

    

    

  </div>

  <div class="comment_content">写的不错,给赞 <img src="/images/smiles/icon_idea.gif"> </div>

</div>

<div id="bc2357405">

  <div class="comment_title">

    8 楼

    <a href="http://syhenian.iteye.com" target="_blank" title="Syhenian">Syhenian</a>

    2014-08-29  

    

    

  </div>

  <div class="comment_content"><div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%3Cupdate%20id%3D%22dynamicSetTest%22%20parameterType%3D%22Blog%22%3E%20%20%0A%20%20%20%20update%20t_blog%20%20%0A%20%20%20%20%3Cset%3E%20%20%0A%20%20%20%20%20%20%20%20%3Cif%20test%3D%22title%20!%3D%20null%22%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20title%20%3D%20%23%7Btitle%7D%2C%20%20%0A%20%20%20%20%20%20%20%20%3C%2Fif%3E%20%20%0A%20%20%20%20%20%20%20%20%3Cif%20test%3D%22content%20!%3D%20null%22%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20content%20%3D%20%23%7Bcontent%7D%2C%20%20%0A%20%20%20%20%20%20%20%20%3C%2Fif%3E%20%20%0A%20%20%20%20%20%20%20%20%3Cif%20test%3D%22owner%20!%3D%20null%22%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20owner%20%3D%20%23%7Bowner%7D%20%20%0A%20%20%20%20%20%20%20%20%3C%2Fif%3E%20%20%0A%20%20%20%20%3C%2Fset%3E%20%20%0A%20%20%20%20where%20id%20%3D%20%23%7Bid%7D%20%20%0A%3C%2Fupdate%3E%20%20"
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" onclick="code_favorites_do_favorite(this);return false;"><img class="star"
src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span><update id=</span><span class="string">"dynamicSetTest"</span><span> parameterType=</span><span
class="string">"Blog"</span><span>>    </span></span></li><li><span>    update t_blog    </span></li><li><span>    <set>    </span></li><li><span>        <<span
class="keyword">if</span><span> test=</span><span class="string">"title != null"</span><span>>    </span></span></li><li><span>            title = #{title},    </span></li><li><span>        </<span
class="keyword">if</span><span>>    </span></span></li><li><span>        <<span class="keyword">if</span><span> test=</span><span class="string">"content != null"</span><span>>    </span></span></li><li><span>            content = #{content},    </span></li><li><span>        </<span
class="keyword">if</span><span>>    </span></span></li><li><span>        <<span class="keyword">if</span><span> test=</span><span class="string">"owner != null"</span><span>>    </span></span></li><li><span>            owner = #{owner}    </span></li><li><span>        </<span
class="keyword">if</span><span>>    </span></span></li><li><span>    </set>    </span></li><li><span>    where id = #{id}    </span></li><li><span></update>    </span></li></ol></div><pre
name="code" class="java" codeable_id="2357405" codeable_type="BlogComment" source_url="http://elim.iteye.com/blog/1338557#bc2357405" pre_index="0" title="MyBatis的动态SQL详解" style="display: none;"><update id="dynamicSetTest" parameterType="Blog">  

    update t_blog  

    <set>  

        <if test="title != null">  

            title = #{title},  

        </if>  

        <if test="content != null">  

            content = #{content},  

        </if>  

        <if test="owner != null">  

            owner = #{owner}  

        </if>  

    </set>  

    where id = #{id}  

</update>  </pre><br><br>这段可以这样写吗   如果ownner等于null   那语句就是<br><br>update t_blog title= 'title', content='content'<span style="color: red;">,</span>  where id='id'<br><br>多了个红色的逗号不会报错?</div>

</div>

<div id="bc2351761">

  <div class="comment_title">

    7 楼

    <a href="http://slc2006119.iteye.com" target="_blank" title="slc2006119">slc2006119</a>

    2014-06-27  

    

    

  </div>

  <div class="comment_content">简单,易懂,确实写的不错,赞一个!</div>

</div>

<div id="bc2350561">

  <div class="comment_title">

    6 楼

    <a href="http://schnauzer.iteye.com" target="_blank" title="dmewy">dmewy</a>

    2014-06-12  

    

    

  </div>

  <div class="comment_content">不错 适合开发初期看</div>

</div>

<div id="bc2349324">

  <div class="comment_title">

    5 楼

    <a href="http://songjianyong.iteye.com" target="_blank" title="宋建勇">宋建勇</a>

    2014-05-28  

    

    

  </div>

  <div class="comment_content">今天整合MyBatis,帮了大忙了啊!不错啊!<img src="/images/smiles/icon_idea.gif"> </div>

</div>

<div id="bc2348923">

  <div class="comment_title">

    4 楼

    <a href="http://xiaoyaya751.iteye.com" target="_blank" title="18289753290">18289753290</a>

    2014-05-23  

    

    

  </div>

  <div class="comment_content">不错<img src="/images/smiles/icon_idea.gif"> <img src="/images/smiles/icon_idea.gif"> </div>

</div>

<div id="bc2342280">

  <div class="comment_title">

    3 楼

    <a href="http://lcg19880128.iteye.com" target="_blank" title="lcg19880128">lcg19880128</a>

    2014-03-14  

    

    

  </div>

  <div class="comment_content"><img src="/images/smiles/icon_idea.gif"> <img src="/images/smiles/icon_idea.gif"> <img src="/images/smiles/icon_idea.gif"> </div>

</div>

<div id="bc2339107">

  <div class="comment_title">

    2 楼

    <a href="http://coffeeboy2012.iteye.com" target="_blank" title="coffeeBoy2012">coffeeBoy2012</a>

    2014-02-07  

    

    

  </div>

  <div class="comment_content"><img src="/images/smiles/icon_idea.gif"> 很详细</div>

</div>

<div id="bc2332128">

  <div class="comment_title">

    1 楼

    <a href="http://huxiulei.iteye.com" target="_blank" title="huxiulei">huxiulei</a>

    2013-11-22  

    

    

  </div>

  <div class="comment_content">嗯  写的不错... 简明易懂</div>

</div>

    

    

  </div>

  <div class="blog_comment">

    <h5>发表评论</h5>

            <p style="text-align:center; margin-top:30px;margin-bottom:0px;"><a href="/login" style="background-color:white;"> <img src="/images/login_icon.png" style="vertical-align:middle; margin-right: 10px;"></a><a href="/login">  您还没有登录,请您登录后再发表评论 </a></p>

      </div>

</div>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: