java - MyBatis注解,从bean更新参数

标签 java annotations mybatis

是否可以进行 MyBatis 更新,您可以提供一个包含要更新的值的 bean,而不是提供单独的参数?

澄清:

而不是这个:

@Update("update widget set name=#{name}, manufacturer=#{manufacturer} where id=#{id}")
public void updateWidget(
         @Param("id") int id, 
         @Param("name") String name, 
         @Param("manufacturer") String manufacturer);

你能做这样的事情吗:

@Update("update widget set name=#{name}, manufacturer=#{manufacturer} where id=#{id}")
public void updateWidget(@Param("id") int id, Widget newValues);

newValues 中已包含要更新的新值吗?

我已经尝试过,但出现异常:

Exception in thread "main" org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'forename' not found. Available parameters are [id, 1, param1, param2]
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:368)
at com.sun.proxy.$Proxy8.update(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:254)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:49)

最佳答案

您应该指定第二个参数名称并在更新语句中引用它。

@Update("update widget set name=#{newValues.name}, manufacturer=#{newValues.manufacturer} where id=#{id}")
public void updateWidget(@Param("id") int id, @Param("newValues") Widget newValues);

关于java - MyBatis注解,从bean更新参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21240858/

相关文章:

java - holder.getAdapterPosition() 和 onBindViewHolder() 中构造函数的位置属性有什么区别

java - 2秒后点击一个按钮

Java:如何简化复杂的注解

java - 使用 Java 8 的 Spring 4 + MyBatis 集成问题

oracle - 用mybatis 3调用pl/sql函数

java - 使用 fusedLocationProviderClient.requestLocationUpdates 时获取 "Caused by: java.lang.NullPointerException: Listener must not be null"

java - 乘法发生溢出

ios - xcode 中的数据库在多个位置使用?

java - 由于意外异常导致 Bamboo 构建失败

mybatis - MyBatis Insert Query中如何手动插入null