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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值