Mybatis Day3

Mybatis 动态SQL

1.if标签:

在MyBatis的动态SQL中,if标签用于根据条件来动态生成SQL语句的一部分。if标签可以嵌套使用,以实现更复杂的条件判断。

下面是一个使用if标签的示例:

 

在上面的示例中,我们定义了一个名为getUserList的查询语句。在WHERE子句中,使用了<if>标签来判断条件是否成立。如果name参数不为null,将会追加AND name = #{name}到SQL语句中;如果age参数不为null,将会追加AND age = #{age}到SQL语句中。这样,根据传入的参数不同,最终生成的SQL语句也会有所变化。

需要注意的是,test属性中的表达式可以使用OGNL表达式语言,用于判断条件是否成立。

通过使用if标签,可以方便地在SQL语句中根据不同的条件生成不同的查询条件,提高了SQL语句的灵活性和可复用性。

2.where标签

MyBatis中,<where>标签是用于动态生成WHERE子句的一个常用标签。它可以根据条件动态地拼接SQL语句,避免不必要的AND或OR关键字。

使用<where>标签可以让我们更加灵活地构建查询条件,简化SQL语句的编写和维护。

下面是一个使用<where>标签的示例:

在上面的示例中,我们使用了<where>标签来包裹条件判断的代码块。在<where>标签内部,使用了<if>标签来判断条件是否成立。

如果传入参数name既不为null也不为空字符串,则生成AND name = #{name}条件;如果传入参数age不为null,则生成AND age = #{age}条件。

使用<where>标签后,当所有条件都未满足时,不会出现多余的AND关键字。

需要注意的是,在使用<where>标签时,我们只需要关注条件表达式本身,而无需关注具体的连接词(如AND或OR)。MyBatis会自动处理连接词的逻辑。

通过使用<where>标签,我们可以更加灵活地构建动态的WHERE子句,根据不同的条件生成不同的查询条件,提高SQL语句的可维护性和复用性。

3.choose标签

MyBatis中,<choose>标签是一种条件选择语句,类似于Java中的switch-case结构。它允许根据条件判断选择不同的SQL语句块进行执行。

<choose>标签通常与<when><otherwise>标签结合使用。

下面是一个使用<choose>标签的示例:

在上述示例中,我们定义了一个名为getUserList的查询语句。在<where>标签内部,使用了<choose>标签来进行条件选择。

  • <when>标签用于定义条件分支,其中的test属性用于指定条件表达式。
  • <otherwise>标签用于定义默认分支,当所有的<when>条件都不满足时,将执行<otherwise>标签内的内容。

在使用<choose>标签时,只会执行匹配到的第一个条件分支,并忽略其他条件分支。

需要注意的是,<choose>标签与<when><otherwise>标签的使用方式类似于嵌套的条件语句,可以根据需要嵌套多层条件。

通过使用<choose>标签,我们可以根据不同的条件选择执行不同的SQL语句块。这样可以在动态SQL中实现复杂的条件判断逻辑,提高查询语句的灵活性和可维护性。

4.foreach标签

<foreach>标签是用于处理集合类型参数的动态SQL标签。它可以循环遍历集合,并根据集合元素动态生成SQL语句的一部分。

<foreach>标签常用于IN子句中,用于将集合中的元素作为SQL语句的参数进行处理。

下面是一个使用<foreach>标签的示例:

在上面的示例中,我们定义了一个名为getUserList的查询语句。在WHERE条件中,使用了<foreach>标签来处理参数集合userIds

<foreach>标签的属性说明如下:

  • collection:指定要迭代的集合参数的名称。
  • item:指定每次迭代时,当前元素在集合中的名称。
  • open:指定循环开始时的字符串。
  • close:指定循环结束时的字符串。
  • separator:指定每个元素之间的分隔符。

在上述示例中,collection="userIds"表示要遍历的集合参数为userIdsitem="userId"表示每次迭代时,当前元素在集合中的名称为userIdopen="("close=")"表示循环开始和结束时分别使用的字符串为括号,separator=","表示每个元素之间使用逗号作为分隔符。

<foreach>标签内部,使用#{userId}来引用当前迭代的集合元素,生成对应的参数占位符。

通过使用<foreach>标签,我们可以方便地将集合类型的参数转化为SQL语句中的多个参数值,实现IN子句等动态条件的生成。同时,<foreach>标签也支持嵌套使用,可以实现更复杂的循环处理逻辑。

5.set标签

MyBatis中,<set>标签是用于动态生成UPDATE语句的一部分的标签。它可以根据条件判断动态地构建SET子句。

<set>标签常用于更新操作中,用于根据传入的参数动态生成需要更新的字段。

下面是一个使用<set>标签的示例:

 

在上面的示例中,我们定义了一个名为updateUser的更新语句。在<set>标签内部,使用了<if>标签来根据条件判断是否更新相应的字段。

如果传入参数name不为null,则生成name = #{name},;如果传入参数age不为null,则生成age = #{age},;如果传入参数email不为null,则生成email = #{email},

通过使用<set>标签,我们可以根据传入的参数动态地生成需要更新的字段和对应的值。这样可以避免在更新操作中更新所有字段,只更新需要变更的字段,提高了更新操作的效率。

需要注意的是,在使用<set>标签时,生成的SQL语句最后可能会存在一个多余的逗号。为了避免这个问题,可以使用Trim标签进行处理。

通过使用<set>标签,我们可以方便地根据条件动态生成UPDATE语句的SET子句,实现灵活的更新操作。

6.trim标签

MyBatis中,<trim>标签是用于动态修整(trim)SQL语句的一部分的标签。它可以根据条件判断来灵活地添加或移除SQL语句中的片段。

<trim>标签常用于处理SQL语句中可能出现的多余的逗号、AND或OR等关键字,以及处理SQL语句片段的前缀或后缀。

下面是一个使用<trim>标签的示例:

 

在上面的示例中,我们定义了一个名为getUserList的查询语句。在<where>标签内部,使用了<trim>标签来修整SQL语句中的WHERE子句。

<trim>标签的属性说明如下:

  • prefixOverrides:指定需要移除的前缀。
  • suffixOverrides:指定需要移除的后缀。

在上述示例中,prefixOverrides="AND |OR "表示移除WHERE子句中以"AND "或"OR "开头的内容。

通过使用<trim>标签,我们可以根据条件判断来移除不必要的SQL语句片段,从而使SQL语句更加清晰和正确。除了移除前缀或后缀,<trim>标签还可以用于添加前缀或后缀,通过设置prefixsuffix属性来实现。

需要注意的是,在使用<trim>标签时,确保条件判断与修整的内容之间有适当的空格,以避免生成的SQL语句出现错误。

通过使用<trim>标签,我们可以灵活地修整SQL语句中的片段,实现更加清晰和精确的动态SQL。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值