MyBatis的IFNULL的使用小结

Mybatis-MySQL 中使用IFNULL(p1,p2)函数
但是有一些需要注意的地方.

假设数据

title: student

idnameage
1Ann18
2Bom19
3Hehe
SELECT name,age FROM student WHERE id = 3;

此时查询结果就是

nameage
hehe

使用IFNULL公式

SELECT name, IFNULL(age,0) FROM student WHERE id = 3;

此时查询结果就是

nameage
hehe0

也就是说, 使用IFNULL时, 如果IFNULL(p1,p2), 如果查询得到p1是null, 那么该字段就会被赋值为p2

注意事项

IFNULL只能对部分字段进行替换, 而如果整个结果时空, 那么IFNULL不起作用

SELECT name,age FROM student WHERE id = 4;

此时查询得到的整条数据都为null
那么此时 SELECT name, IFNULL(age,0) FROM student WHERE id = 4; 失效,依然得到一个空记录

配合Mybatis使用

假设目前有表格param, 有字段是param_name,表示该param的英文名, 有个param_chs_name字段表示该param的中文名,当中文名不存在的时候, 则返回其英文名字段,中文名字段可能不为null, 但可能是空字符串

SELECT param_name,(CASE WHEN IFNULL(trim(param_chs_name),'') = '' THEN param_name ELSE param_chs_name END) AS param_chs_name from param;

CASE WHEN 条件 THEN 结果1 ELSE 结果2 END
是mybatis常用的条件替换

另外还可以使用IF函数

SELECT param_name,(IF(IFNULL(trim(param_chs_name),'') = '' , param_name , param_chs_name )) AS param_chs_name from param;

能起到同样的效果!
IF(条件,结果1,结果2);

Mybatis中,可以使用IFNULL函数来处理查询结果中的空值。IFNULL函数接受两个参数,如果第一个参数为null,则返回第二个参数,否则返回第一个参数的值。例如,可以使用SELECT name, IFNULL(age,0) FROM student WHERE id = 4;来查询学生表中id为4的学生的姓名和年龄,如果年龄为空,则返回0。 然而,有一些情况下IFNULL函数可能不起作用。如果查询结果本身就是null,那么IFNULL函数将无效。另外,如果查询结果有值,但是该字段的值为null时,IFNULL函数才会起作用。为了避免这种情况,可以使用CASE语句来代替IFNULL函数。例如,可以使用SELECT CASE WHEN (SELECT cost FROM ${tableName} WHERE jobId LIKE #{jobId} AND `date`=#{date}) IS NULL THEN 0 ELSE (SELECT cost FROM ${tableName} WHERE jobId LIKE #{jobId} AND `date`=#{date}) END;来查询${tableName}表中符合条件的cost值,如果cost为null,则返回0。 需要注意的是,有些人可能建议将返回类型由int改为Integer,以确保IFNULL函数能正常工作。但实际上,并不需要这样做。在Mybatis中,IFNULL函数的使用不受返回类型的影响。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MyBatisIFNULL使用小结](https://blog.csdn.net/weixin_38137028/article/details/88245042)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Mybaties IFNULL 失效](https://blog.csdn.net/banana1006034246/article/details/90520841)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值