MyBatis 如何配置动态的 sql 语句
Posted 发哥微课堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis 如何配置动态的 sql 语句相关的知识,希望对你有一定的参考价值。
0x00:介绍
我们在配置 MyBatis 映射文件的时候,会遇到以下几种情况,例如说要根据一些查询条件去选择不同的 sql 语句,或者说把那些使用频率特别高的 sql 语句单独的配置出来,然后在需要它的地方直接引用即可。这就需要用到了 MyBatis 的动态配置 sql 语句机制。
0x01:代码示例
当碰到需要根据查询条件选择不同的 sql 语句情况时,我们可以使用 where 标签来配置,在 where 标签中有一个 if 标签,它就是用来判断查询的条件然后分配不同的 sql 语句的。例如以下示例:
<select id="findUserList" parameterType="com.mybatis.dao.UserQuery" resultType="com.mybatis.dao.User">
select * from user <where>
<if test="UserQuery != null">
<if test="UserQuery.gender != null and UserQuery.gender != ''">
and user.sex = #{UserQuery.gender} </if>
<if test="UserQuery.username != null and UserQuery.username != ''">
and user.username like '%${UserQuery.username}%' </if>
</if>
</where></select>
在以上代码中,查询就使用了动态配置,当 gender 和 username 都不为空时就同时两个条件,当其为空时,就不会作为查询条件了。
这时介绍中说的第一种情况,根据查询条件去选择不同的 sql 语句。第二种是配置频率特别高的 sql 语句。我们叫配置 sql 片段,配置方式很简单,需要在使用该 sql 片段的映射配置文件中声明即可,格式如下:
<sql id="user_query">
<!-- 复用的sql --></sql>
以上代码中,id 是唯一标识不可重复的。引入的时候,通过 include 引入即可,示例如下:
<include refid="user_query"></include>
其中 refid 的值是需要引用 sql 片段的 id 值,MyBatis 中很多标签都可以用 id 来指定别名,然后用 refid 在其他地方引用。
0x02:sql 片段拓展
除了可以使用同一个文件中的 sql 片段,也可以引用其他文件的 sql 片段,其引入方式是在 id 标识前加入配置文件所在的 namespace,也就是空间名,例如空间名为 test,则配置示例如下:
<include refid="test.user_query"></include>
0x03: 总结
MyBatis 动态配置 sql 语句,通过 where 标签来配置,where 标签中的 if 标签来决定是否使用其 sql 语句,有点像程序中的判断语句。当需要用到频率特别高的 sql 语句时,需要将其配置成 slq 片段,通过 include 标签即可,include 不仅可以引用自己映射文件中的 sql 片段,也可以引用其他文件中的 sql 片段,当需要引用其他映射文件中的 sql 片段时,只需要加上 namespace 名称即可。
如果想get更多的技能,长按二维码可关注我
以上是关于MyBatis 如何配置动态的 sql 语句的主要内容,如果未能解决你的问题,请参考以下文章