mybatis坑之数字字符串比对
在mybatis开发过程中有需要在sql中判断查询哪张表,如下sql:
SELECT
a.tag_name,
a.tag_id,
count( 0 ) AS base_total
FROM
mm_dd_body a
<if test="tagType!=null and tagType == '0'">
LEFT JOIN ccc AS b ON b.tag_body_id = a.id
</if>
<if test="tagType!=null and tagType == '1'">
<![CDATA[
left join `vvvv` `b` on CONVERT ( concat( '-', `b`.`mark_rule_key` ) USING utf8mb4 ) REGEXP concat( '(\\(|[[:blank:]]+|-){1,}', `a`.`column_name`, '(>|<|>=|<=|=|[[:blank:]])+' )
AND b.tag_id IN ( SELECT tag_id FROM gggg WHERE product = a.product )
]]>
</if>
WHERE
a.tag_base_cat = #{tagType}
AND a.del = 0
在运行时发现不管tagType传什么值都不会进入两个if中,
经过分析,'1'是会被转成数字,所以这里有两种方案:
方案1:将参数转为int类型,再进行比较
<if test="tagType!=null and tagType == 0 ">
LEFT JOIN ccc AS b ON b.tag_body_id = a.id
</if>
方案二:将数字转成字符串,加上.toString(),如下:
<if test="tagType!=null and tagType == '0'.toString()">
LEFT JOIN ccc AS b ON b.tag_body_id = a.id
</if>
当然上面的设计本就不是一个好的设计,违背了单一职责原则,可以将if判断剥离成两个单独select,然后在业务层去判断是使用哪个,这也是一种好的方案,可以规避不少坑
mybatis坑之数字字符串比对的更多相关文章
- JAVA将数字字符串强制转换成整型变量----求参数之和实验代码(附流程图)
一.设计思想 先将参数个数输出,并利用循环结果将参数逐个输出,再将字符串强制转化成整型,利用循环结构相加求和 二.程序流程图 三.源程序代码 package demo; public class Co ...
- js如何将纯数字字符串转换为long型
1.js如何将纯数字字符串转换为long型? js 中 int的存储位数?最大十进制数表示是多少? 精度http://www.jb51.net/article/59808.htm 整数(不使用小数点或 ...
- double类型字符串转换成一个纯数字字符串和一个小数点位数的c++代码
今天工作中遇到一个要不一个double型的字符串转换成一个纯字数字符串和一个标志这个数字字符串的小数点有几位的int类型 例如:“23.123”--->“23123” + 3 比较简单.就是 ...
- 基于visual Studio2013解决面试题之0503取最大数字字符串
题目
- 在js中做数字字符串加0补位,效率分析
分类: Jquery/YUI/ExtJs 2010-08-30 11:27 2700人阅读 评论(0) 收藏 举报 functiondate算法语言c 通常遇到的一个问题是日期的“1976-02-03 ...
- java数字字符串累加1的解决方案
近期操作项目遇到这样的问题,研究了下搞出了一个解决方案. //num也可以是在数字字符串里面截取的,比如我有14位的数字字符串前六位是市级,7,8位代表县区,后两位代表乡镇,最后四位是累计+1的,这个 ...
- C# 设置Excel中的数字字符串格式
在Excel中,数字字符串用不同格式表示,可代表不同数据意义.例如在财务报表里需要用特定的数字字符串格式来反映金额信息.货币币种.数据精确程度.增减趋势等等.下面分享如何通过C#编程来设置Excel表 ...
- is_numeric — 检测变量是否为数字或数字字符串
is_numeric — 检测变量是否为数字或数字字符串 bool is_numeric ( mixed $var ) 如果 var 是数字和数字字符串则返回 TRUE ,否则返回 FALSE . 参 ...
- C#学习-图解教程(1):格式化数字字符串
学习内容:C#:学习书籍:图解教程(中文第四版). 目录:第二章 C#编程概述 -----> 2.7 从程序中输出文本 -----> 2.7.5格式化数字字符串 using System; ...
- PHP is_numeric 检测变量是否为数字或数字字符串
bool is_numeric ( mixed $var ) 如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE. For example 1: <?php $v = is_ ...
随机推荐
- ENSP的VirtualBox虚拟网卡不能用
VirtualBox 安装好后本地会新建一个名为 "VirtualBox Host-Only Network" 的虚拟网卡,虚拟机可以通过这个虚拟网卡网卡和物理机通信.但ENSP有 ...
- .NET 文件上传服务设计
.NET文件上传服务设计 前言 在b站学习了一个后端小项目,然后发现这个文件上传设计还挺不错,来实现讲解一下. 项目结构如下: 基于策略+工厂模式实现文件上传服务 枚举 在Model层创建即可 pub ...
- mac navicat免激活版
Navicat 12 第一步:终端执行 sudo spctl --master-disable 第二步:下载安装即可使用 https://pan.baidu.com/s/1tHq-wqAIggD0Fo ...
- k8s 实战 3----标签
如果你对k8s还不了解,可以看下前文k8s 实战 1 ---- 初识 (https://www.cnblogs.com/jilodream/p/18245222)k8s 实战 2 ---- pod 基 ...
- SQLServer的操作以及一些概念
初始SQLServer 创建数据库 create database 数据库名 创建表 选择数据库 USE MyDb; 创建表 CREATE TABLE t_user ( id INT, usernam ...
- sql server 编写函数,去除小数点后多余的0
sql server 编写函数,去除小数点后多余的0 要在 SQL Server 中编写一个函数来去除小数点后多余的零,你可以使用以下示例的方法: CREATE FUNCTION dbo.Remove ...
- oeasy教您玩转vim - 16 跳到某行
跳到某行 回忆上节课内容 上下行 向 下 是 j 向 上 是 k 上下行首 向 下 到行首非空字符 + 向 上 到行首非空字符 - 这些 motion 都可以加上 [count] 来翻倍 首尾行 首行 ...
- [oeasy]python0014_二进制_binary_bin
二进制(binary) 回忆上次内容 上次我们了解了ASCII码表 ASCII 码表就是 American Standard Code for Inf ...
- Java 中的一些知识点
Java 中的一些知识点 Java 中的知识点 与C++相关 toString方法 super 与C++相关[了解的不是很多] 在Java程序中:一个方法以 ; 结尾,并且修饰符列表中有 native ...
- vue小知识~使用$attrs和$listeners接收父组件转来的属性和方法
一般下我们子组件获取父组件传过来的的值得时候,我们是使用props来接收,但是如果我们父组件转过来的值是给孙组件使用时,使用哪个props接收的方式太过麻烦. 这是vue为我们提供了一个实例$attr ...