手机
当前位置:查字典教程网 >编程开发 >Java >MyBatis 动态拼接Sql字符串的问题
MyBatis 动态拼接Sql字符串的问题
摘要:MyBatis的一个强大的特性之一通常是它的动态SQL能力。如果你有使用JDBC或其他相似框架的经验,你就明白条件地串联SQL字符串在一起是...

MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力。如果你有使用 JDBC 或其他 相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号。动态 SQL 可以彻底处理这种痛苦。

动态SQL

MyBatis的动态SQL,解决了SQL字符串拼接的痛苦。

1.if

<select id="findActiveBlogWithTitleLike" parameterType="Blog" resultType="Blog"> SELECT * FROM BLOG WHERE state = 'ACTIVE' <if test="title != null"> AND title like #{title} </if> </select>

这条一句会提供一个可选的文本查找功能。如果没有传递title,那么所有激活的博客都会被返回。

如果传递了title,那么就会查找相近的title。

2.choose,when,otherwise

<select id="findActiveBlogLike" parameterType="BLOG" resultType="BLOG"> SELECT * FROM BLOG WHERE <choose> <when test="title != null"> AND title like #{title} </when> <when test="author != null and author.name != null"> AND title like #{author.name} </when> <otherwise> AND featured = 1 </otherwise> </choose> </select>

注:如果上述条件都没有匹配,则会变成SELECT * FROM BLOG WHERE

如果仅有第二个匹配,则会变成SELECT * FROM BLOG WHERE AND title LIKE somelike

显然这样会查询失败。要解决这个问题,mybatis提供了解决方法。

<select id="findActiveBlogLike" parameterType="BLOG" resultType="BLOG"> SELECT * FROM BLOG WHERE <trim prefix="WHERE" prefixOverrides="AND |OR "> <choose> <when test="title != null"> AND title like #{title} </when> <when test="author != null and author.name != null"> AND title like #{author.name} </when> <otherwise> AND featured = 1 </otherwise> </choose> </trim> </select>

overrides属性采用管道文本分隔符来覆盖,这里的空白是重要的。它的结果就是移除在InnerText中overrides中指定的内容。

3.set

<update id="updateAuthorIfNecessary" parameterType="Author"> update Author <set> <if test="username != null">username=#{username},</if> <if test="password != null">password=#{password},</if> <if test="email != null">email=#{email}</if> </set> where id=#{id} </update>

同上的问题,优化后:

<update id="updateAuthorIfNecessary" parameterType="Author"> update Author <trim prefix="where" prefixOverrides=","> <set> <if test="username != null">username=#{username},</if> <if test="password != null">password=#{password},</if> <if test="email != null">email=#{email}</if> </set> where id=#{id} </trim> </update>

以上所述是小编给大家介绍的MyBatis 动态拼接Sql字符串的问题,希望对大家有所帮助,如果大家有任何疑问请给我们留言,小编会及时回复大家的。在此也非常感谢大家对查字典教程网的支持!

【MyBatis 动态拼接Sql字符串的问题】相关文章:

Java 按照字节来截取字符串的代码(不会出现半个汉字)

Java加载资源文件时的路径问题的解决办法

基于Java 数组内存分配的相关问题

java 全角半角字符转换的方法实例

Java中去除字符串中所有空格的几种方法

java中原码、反码与补码的问题分析

java中字符串与日期的转换实例

java 字符串相减(很简单的一个方法)

java全角、半角字符的关系以及转换详解

浅析Mybatis 在CS程序中的应用

精品推荐
分类导航