dao 层接口

int insert(@Param("node") Node node);

xml 文件

<insert id="insert" parameterType="cn.roothub.bbs.module.node.model.Node" keyProperty="nodeId" useGeneratedKeys="true">

报错信息

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'nodeId' not found. Available parameters are [node, param1]

提示获取自增主键时失败,无法找到 nodeId 字段。

可是我明明有 nodeId 字段,get/set 方法也有,怎么会找不到呢?

解决方法

原来是我的 dao 层接口使用了@Param 注解,所以这时候直接指定 keyProperty 属性是无效的,这时候需要通过注解定义的对象名.属性

比如我指定的参数名是 @Param(“node”),那么 keyProperty 就要指定为 node.nodeId

keyProperty="node.nodeId"

这样就能获取到自增主键了

如果你不用 @Param 注解指定参数的名字,那么直接通过 nodeId 是可以获取到自增主键的。

原文链接:https://miansen.wang/2019/06/23/2/