MyBatis知识盘点【伍】_动态sql

上篇文章:MyBatis知识盘点【肆】_映射器


支持的元素有if、choose、trim、foreach和bind,下面分别介绍:




if:单条件分支判断

SELECT `user_id`,`platform`,`orderId`,`product_id`,`product_name`,NOW(),NOW(),NOW(),app_business_id,app_group_id,
          < if test = "type ==2" > <!-- 半月 -->
             DATE_ADD(NOW(),INTERVAL 15 DAY)
          </ if >
          < if test = "type ==3" > <!-- 包月 -->
             DATE_ADD(NOW(),INTERVAL 1 MONTH)
          </ if >
          < if test = "type ==4" > <!-- 包季 -->
             DATE_ADD(NOW(),INTERVAL 3 MONTH)
          </ if >
          < if test = "type ==5" > <!-- 包半年 -->
             DATE_ADD(NOW(),INTERVAL 6 MONTH)
          </ if >
          < if test = "type ==6" > <!-- 包年 -->
             DATE_ADD(NOW(),INTERVAL 12 MONTH)
          </ if >
          < if test = "type ==7" > <!-- 走运营商产品订购,失效时间为空 -->
             null
          </ if >
         FROM `user_order` WHERE `orderId` =#{orderId};


choose(when、otherwise):相当于java中的case when,多条件分支判断

SELECT `user_id`,`platform`,`orderId`,`product_id`,`product_name`,NOW(),NOW(),NOW(),app_business_id,app_group_id     FROM `user_order` WHERE 1=1 
     <choose>
          < when  test = "user_id != null and   user_id !='' " >
            AND  user_id = #{ user_id }
          </ when >
          < when  test = " orderId != null and   orderId  !='' " >
            AND  orderId = #{ orderId }
          </ when >
           < otherwise >
            AND  product_id is not null
          </ otherwise >
    </choose>



trim(where、set):处理sql拼装


trim可以去掉一些特殊的字符串, prefix代表前缀, prefixOverrdes是要去掉的字符串。

SELECT `user_id`,`platform`,`orderId`,`product_id`,`product_name`,NOW(),NOW(),NOW(),app_business_id,app_group_id     FROM `user_order` 
           <trim prefix="where" prefixOverrdes="and" >
     <choose>
          < when  test = "user_id != null and   user_id !='' " >
            AND  user_id = #{ user_id }
          </ when >
          < when  test = " orderId != null and   orderId  !='' " >
            AND  orderId = #{ orderId }
          </ when >
           < otherwise >
            AND  product_id is not null
          </ otherwise >
     </choose>
     </trim>

set可以在更新语句中,帮我们去掉多的逗号

< update id = "updateVIP"   parameterType = "java.util.Map" >
         UPDATE `user_order_vip` v   SET v.`platform`=o.`platform`,v.`orderId`=o.`orderId`,v.`product_id`=o.`product_id`,v.`product_name`=o.`product_name`,
         v.` updatetime `=NOW(),
         v.starttime= CASE WHEN v.overtime>NOW() THEN v.starttime ELSE NOW() END,
          < if test = "type !=null and type!='' " >
             v.type = #{type},
          </ if >
          < if test = " updatetime !=null and   updatetime !='' " >
             v.` updatetime `=#{ updatetime }
          </ if >
     </ update >




foreach:in语句中使用


< select id = "selectOrders" parameterType = "java.lang.String" resultType = "com.hzdracom.core.bean.Order" >
          <!-- SELECT * FROM `user_order` WHERE `orderId`=#{orderId} -->
         select *,CASE WHEN (is_unified_product is NULL) then 0 else is_unified_product end   isUnifiedProduct from user_order
         WHERE orderId IN 
        <foreach item=" order_id " index = "index" collection="orderList" open="(" separator="," close=")">
        #{order_id}
   </foreach>
</ select >



bind 模糊查询时用


<select id="selectFlowForUpdate" resultMap="BaseResultMap"
        parameterType="java.lang.String">
        <bind name="ENTR_ID" value="'%' + _parameter" />
        select
        *
        from
        TC_ENTR_FLOW
        where ENTR_ID like #{ENTR_ID}
        for update
    </select>


在使用Spring Boot集成MyBatis时,连接SQL Server 数据库时,可能会出现“err_connection_refused”的异常。这个异常通常是由于网络或数据库连接出现问题导致的,具体的原因可能有很多。 首先,我们可以检查一下网络连接是否可用。确认网络还是工作正常,并且确保在连接时输入的数据库地址和端口号是正确的。特别是如果数据库运行在远程服务器上,还需要确认是否设置了正确的访问权限。 可以通过尝试使用其他SQL Server的连接方式,比如通过命令行客户端(SQL Server Management Studio)来测试数据库是否可以正常连接。如果数据库能够正常连接,则可以考虑检查 JDBC 驱动程序是否正确配置。 在使用MyBatis时,还需要考虑数据库的驱动程序和配置。在pom.xml文件中添加相应的依赖项并配置datasource,确保datasource的属性与所使用的SQL Server版本和配置相匹配。 如果以上步骤仍然无法解决问题,我们可以检查一下数据库日志,查看是否有相关的错误或警告。数据库日志可以提供更详细的信息,以便更好地定位问题。此外,还可以尝试简化数据库连接池配置,例如将其缩小到最小值,检查数据库连接数是否过多或是否达到了最大连接数。 在MyBatis集成Spring Boot时,还可以尝试使用Spring Boot Starter集成MyBatis,它可以自动地为我们配置数据库。注意,此时需要保证配置文件中的相关属性与本地的数据库配置相匹配。 总之,当Spring Boot集成MyBatis连接SQL Server时,我们需要仔细排查异常的原因。通过上述方法,我们可以逐步进行问题定位并解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值