#{}怎么从参数中读取属性值的

在 MyBatis 的 @Update 注解里,#{…} 里的名字 并不是 按照 “Java 字段名” 去解析,而是按照 参数名 或者 @Param 注解指定的名字 去解析。

你现在的写法:

@Update("update shopping_cart set number = #{number} where id = #{id}")
void update(ShoppingCart cart);

没有任何 @Param 注解,MyBatis 会把 唯一的参数 cart 当成一个 Map,然后按 属性名 去取值。
因此

#{id}   →  cart.getId()
#{number} → cart.getNumber()

能正常工作 前提是

  1. ShoppingCart 类里真的有
    private Long id;
    private Integer number;
    // 以及对应的 getter
    
  2. 你用的是 JDK 8+ 并且代码在编译时开启了 -parameters 选项(默认 Maven/Gradle 插件都会开),或者 MyBatis 通过反射找到了 getter。

✅ 一句话总结

#{id} 就是调了 cart.getId(),MyBatis 把单个对象当成 “属性名 → 属性值” 的 Map 来用。


❗ 如果想显式指定,防止混淆

可以用 @Param 把对象整体起个别名,然后显式点属性:

@Update("update shopping_cart set number = #{sc.number} where id = #{sc.id}")
void update(@Param("sc") ShoppingCart cart);

这样可读性更高,也避免了多参数时搞混。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值