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 名称即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值