【Mybatis系列】Mybatis判断问题_mybatis 判断 noteq

@Autowired
private TestMapper testMapper;

@Override
public void run(String... args) throws Exception {
    Test3PO test3PO = new Test3PO();
    test3PO.setId(0);
    test3PO.setDate(new Date());
    this.testMapper.judge(test3PO);
}

}


xml 中的语句



SELECT id, date FROM test1 where 1=1 order BY id DESC

#### 2.结果


输出的 sql 结果如下,也就是 query.id!=''为`false`了,是不是比较震惊,一个 Integer 类型的 0 和字符串相互比较,结果居然是`true`



SELECT id, date
FROM test1
where 1=1


### 二.源码探究


#### 1.ASTNotEq


因为比较的是!=方法,所以在 ASTNotEq 的源码的比较地方打了断点,关键点在于 OgnlOps.equal(v1, v2)方法


![image-20240104112736297](https://img-blog.csdnimg.cn/img_convert/3ea25a42be2b78f94023513df9b4490f.png)


#### 2.isEqual 方法


断点跟进 compareWithConversion 方法


![image-20240104112911654](https://img-blog.csdnimg.cn/img_convert/3c75e5ea74b4a0b1726ee31f0f6ecb2e.png)


#### 3.compareWithConversion


![image-20240104112941621](https://img-blog.csdnimg.cn/img_convert/190fa8caac8ebcc9e0d8d0a678d31565.png)


#### 4.doubleValue


看到这里就真相大白了,mybatis 的源码在判断的时候,先判断字符串的长度,再根据字符串的长度给出一个 Double 类型的值,因为字符串为空字符串,长度为 0,所以返回的值为 0.0,与参数 0 的返回值 0.0 一致,`真的狗`


![image-20240104113005638](https://img-blog.csdnimg.cn/img_convert/fb0a2019c2cebb48e468f87d039b8240.png)


#### 5.判断中的 in 使用



SELECT #{query.id}

* `<select>` 标签:表示一个查询语句。在这里,`id` 属性是该查询语句的唯一标识符,`resultType` 属性指定了查询结果的类型为整数。
* `<if>` 标签:这是一个动态 SQL 元素,用于在运行时根据条件动态地生成 SQL 语句的一部分。在这里,`test` 属性表示条件判断,如果 `query.id` 的值在 (1, 2, 3, 4) 这个集合中,就会执行 `<if>` 标签内的 SQL 语句。
* SQL 语句:在 `<if>` 标签内部,`SELECT #{query.id}` 是实际的 SQL 查询语句。`#{query.id}` 是 MyBatis 中的参数占位符,它会被实际的参数值替代。这里的查询语句是动态生成的,根据条件是否成立而变化。



> 
> 觉得有用的话点个赞 `👍🏻` 呗。  
>  ❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
> 
> 
> 💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
> 
> 
> 🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
> 
> 
> ![img](https://img-blog.csdnimg.cn/img_convert/a08571f736dc04b5bef51cd09e8e3a0a.gif#pic_center)
> 
> 
> 







**ES6**

*   列举常用的ES6特性:

*   箭头函数需要注意哪些地方?

*   let、const、var

*   拓展:var方式定义的变量有什么样的bug?

*   Set数据结构

*   拓展:数组去重的方法

*   箭头函数this的指向。

*   手写ES6 class继承。

![](https://img-blog.csdnimg.cn/img_convert/aac1740e50faadb9a6a7a5b97f9ccba8.png)



**微信小程序**

*   简单描述一下微信小程序的相关文件类型?

*   你是怎么封装微信小程序的数据请求?

*   有哪些参数传值的方法?

*   你使用过哪些方法,来提高微信小程序的应用速度?

*   小程序和原生App哪个好?

*   简述微信小程序原理?

*   分析微信小程序的优劣势

*   怎么解决小程序的异步请求问题?

![](https://img-blog.csdnimg.cn/img_convert/60b1dbe5c76e264468aa993416a9a031.png)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值