遇到一个奇怪的问题

查询日期条件筛选下的订单信息并附加归属酒店

sql语句在sqlyog视图软件上测试可以执行,并且每条订单后面都附加有归属酒店


但是项目启动后,发起请求测试返回数据里只有订单的信息,并没有归属酒店。。


在网上搜索了各种答案,代码修修改改N次,问题解决了。。

在数据库里执行结果集返回正确肯定不是sql语句的问题。

使用的是mybatis框架,mybatis最容易出错的就是xml文件的关系等映射问题。。

记录一下自己的错误,

每个表建的有实体类,但是这个功能是两个表联合查询后附加其中一个表的字段内容要显示出来

在网上查找的解决办法有3种:

1. 使用as 用别名显示。

2. 把想要查询的结果的每个字段都写出来。

3. 建立DTO类,通过mepper文件映射。。

本身框架就是通过映射来实现的。。

前两个方式要建立在第三种的情况下才能生效。。

最后发现。。 

我的实体类都只是封装了各自表的字段,想要附加内容的字段并没有封装进去。。

最后在查询结果表的实体类中添加了想要附加的另一张表的字段。。问题解决了。



感谢:https://www.cnblogs.com/wuyun-blog/p/5693937.html



转载于:https://www.cnblogs.com/zhi-ma/p/9345959.html

你遇到的问题是: > **当传参为 `NULL` 时没问题,传 `""`(空字符串)时却出现问题。** 这在 C 语言中是一个非常常见的问题,根本原因在于: --- ### ❗️`NULL` 和 `""` 的本质区别 | 类型 | 表示 | 含义 | 是否指向有效内存 | |------|------|------|------------------| | `NULL` | `(void*)0` | 空指针,不指向任何内存 | ❌ | | `""` | `char[1]` | 指向一个只包含 `\0` 的字符串 | ✅ | 也就是说: - `NULL` 是一个“空指针”,你不能对它调用 `strlen`, `strcpy`, `printf("%s")` 等函数,否则会 **崩溃(segmentation fault)**。 - `""` 是一个“合法字符串”,只不过长度为 0(只包含 `\0`),可以安全地用 `%s` 打印、`strlen` 等。 --- ### ✅ 为什么传 `NULL` 没问题? 你在判断时可能是这样写的: ```c if (interface) { // 构造带 dev 的命令 } else { // 不带 dev } ``` 当 `interface == NULL` 时,条件判断为 `false`,程序走的是 **不带 `dev` 的路径**,不会访问 `interface` 的内容,所以不会出错。 --- ### ❌ 为什么传 `""` 会出问题? 如果你的判断逻辑是: ```c if (interface) { ... } ``` 但没有进一步判断字符串内容是否为空,比如: ```c if (interface && strlen(interface) > 0) { ... } ``` 那么即使 `interface` 是 `""`,它也是非空指针,会被认为是有内容,从而进入构造命令的分支: ```c snprintf(cmd, sizeof(cmd), "ip route add %s dev %s via %s table %s", destination, interface, gateway, table_name); ``` 此时 `interface` 是空字符串,生成的命令就会变成: ```bash ip route add 192.168.1.0/24 dev via 192.168.18.2 table hub_spoke ``` 中间的 `dev` 后面是空的,这个命令在 shell 中执行会失败。 --- ### ✅ 正确的判断方式 你应该判断指针是否为空 **并且** 字符串内容是否为空: ```c if (interface && strlen(interface) > 0) { // interface 有值 snprintf(cmd, sizeof(cmd), "ip route add %s dev %s via %s table %s", destination, interface, gateway, table_name); } else { // interface 为空或 NULL snprintf(cmd, sizeof(cmd), "ip route add %s via %s table %s", destination, gateway, table_name); } ``` --- ### ✅ 示例代码 ```c #include <stdio.h> #include <string.h> int main() { char cmd[512]; const char *destination = "192.168.1.0/24"; const char *gateway = "192.168.18.2"; const char *table_name = "hub_spoke"; const char *interface = ""; // 改成 NULL 或 "" 测试 if (interface && strlen(interface) > 0) { snprintf(cmd, sizeof(cmd), "ip route add %s dev %s via %s table %s", destination, interface, gateway, table_name); } else { snprintf(cmd, sizeof(cmd), "ip route add %s via %s table %s", destination, gateway, table_name); } printf("CMD: %s\n", cmd); return 0; } ``` --- ### ✅ 总结 | 参数值 | 判断 `if (interface)` | `strlen(interface)` | 是否构造带 `dev` | |--------|------------------------|----------------------|--------------------| | `NULL` | ❌ | 不执行 | ❌ | | `""` | ✅ | `0` | ❌(应跳过) | | `"eth0"` | ✅ | `>0` | ✅ | --- ### ✅ 解决方案总结 - ✅ 使用 `if (interface && strlen(interface) > 0)` 来判断是否构造带 `dev` 的命令。 - ✅ `NULL` 和 `""` 都表示“无设备”,但它们在 C 中的处理方式不同。 - ✅ `""` 是合法字符串,但不能直接用于命令构造,需额外判断内容是否为空。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值