mybatis查询数据为空

在使用Mybatis进行数据查询时,遇到查询接口返回数据为空的状况。检查代码无误,尝试在mapper.xml中使用concat拼接字符串,但查询结果依然为0。最终发现是由于在查询条件中,skuName的value值包含双引号导致的。解决问题的方法是去掉双引号。此外,注意Controller层请求,当前端参数通过response body传递时,@ModelAttribute需改为@RequestBody。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用postman测试一个查询接口,数据为空。

查询的代码,没有问题。

public List<Long> getByLikeName(String name) {
    return skuDao.getByLikeName("%" + name + "%");

}
<!-- sku模糊名字编码编号查询-->
<select id="getByLikeName" parameterType="java.lang.String" resultType="Long">
    SELECT s.id
    FROM sku s
    WHERE s.sku_name LIKE #{name} OR s.sku_code LIKE #{name} OR s.bar_code LIKE #{name} AND deleted = '0'
</select>

 

明明有数据,为什么查询出来的结果为空呢?后来改了一下查询方式,在mapper.xml中使用concat拼接字符串。

public List<Long> getByLikeName(String name) {
    return skuDao.getByLikeName(name);

} 

<!-- sku模糊名字编码编号查询-->
    <select id="getByLikeName" parameterType="java.lang.String" resultType="Long">
        SELECT s.id
        FROM sku s
        WHERE deleted = 0 AND
        (s.sku_name LIKE concat('%', #{name,jdbcType=VARCHAR}, '%')
        OR s.sku_code LIKE concat('%', #{name,jdbcType=VARCHAR}, '%')
        OR s.bar_code LIKE concat('%', #{name,jdbcType=VARCHAR}, '%'))
    </select>

 可以看到,筛选出的数据仍然是0.

Preparing: SELECT s.id FROM sku s WHERE deleted = 0 AND (s.sku_name LIKE concat('%', ?, '%') OR s.sku_code LIKE concat('%', ?, '%') OR s.bar_code LIKE concat('%', ?, '%'))  
2019-06-27 16:54:44 [http-nio-8003-exec-1] DEBUG c.r.s.o.m.S.getByLikeName - ==> Parameters: "铅笔"(String), "铅笔"(String), "铅笔"(String) 
2019-06-27 16:54:44 [http-nio-8003-exec-1] DEBUG c.r.s.o.m.S.getByLikeName - <==      Total: 0 



 

最后解决方式:

修改skuName的value值,改成铅笔,不要加双引号,就可以了。

 

==>  Preparing: SELECT s.id FROM sku s WHERE deleted = 0 AND (s.sku_name LIKE concat('%', ?, '%') OR s.sku_code LIKE concat('%', ?, '%') OR s.bar_code LIKE concat('%', ?, '%'))  
2019-06-27 16:51:48 [http-nio-8003-exec-3] DEBUG c.r.s.o.m.S.getByLikeName - ==> Parameters: 铅笔(String), 铅笔(String), 铅笔(String) 
2019-06-27 16:51:48 [http-nio-8003-exec-3] DEBUG c.r.s.o.m.S.getByLikeName - <==      Total: 17 

 

 

总结:

//参数不加双引号
Preparing: SELECT s.id FROM sku s WHERE s.sku_name LIKE ? OR s.sku_code LIKE ? OR s.bar_code LIKE ? AND deleted = '0'  
2019-06-27 17:04:56 [http-nio-8003-exec-2] DEBUG c.r.s.o.m.S.getByLikeName - ==> Parameters: %铅笔%(String), %铅笔%(String), %铅笔%(String) 
2019-06-27 17:04:56 [http-nio-8003-exec-2] DEBUG c.r.s.o.m.S.getByLikeName - <==      Total: 17  


//参数加双引号
Preparing: SELECT s.id FROM sku s WHERE s.sku_name LIKE ? OR s.sku_code LIKE ? OR s.bar_code LIKE ? AND deleted = '0'  
2019-06-27 17:09:06 [http-nio-8003-exec-1] DEBUG c.r.s.o.m.S.getByLikeName - ==> Parameters: %"铅笔"%(String), %"铅笔"%(String), %"铅笔"%(String) 

双引号也是字符啊,想想也是这个道理,这么简单,搞了好久。

注意controller层请求:

@PostMapping("queryList")
public BaseResultVo queryList(@ModelAttribute WarehouseInventoryReportDTO dto);

这里使用的是@ModelAttribute,postman参数放在params里,即跟在url后面。

如果前端请求把参数放在了response body中传过来,@ModelAttribute需要改成@RequestBody。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值