是否可以进行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)
答案 0 :(得分:4)
您应该指定第二个参数名称并在更新语句中引用它。
@Update("update widget set name=#{newValues.name}, manufacturer=#{newValues.manufacturer} where id=#{id}")
public void updateWidget(@Param("id") int id, @Param("newValues") Widget newValues);