Mybatis在做INSERT操作的时候如何返回主键?

<insert id="register" parameterType="com.graduation.entity.SellerEntity" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO seller (seller_name,seller_address,create_time,modify_time,`password`) VALUES(#{name},#{address},#{create_time},#{modify_time},#{password})
</insert>

我在网上找到的资料说 添加这两个属性就可以了:useGeneratedKeys="true" keyProperty="id"

但总是报这样的错:

org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [password, param5, address, create_time, modify_time, name, param3, param4, param1, param2]

阅读 10.7k
7 个回答

你的SellerEntity中的属性名是不是不是id,而是 sellerId这样的?
要和model中保持一致的属性名啊,插入成功后你的SellerEntity对象中的主键会被赋值为数据库中的id值

新手上路,请多包涵

SellerEntity 确定有id属性吗

SellerEntity 代码长什么样子,放一下,估计是没对应上

新手上路,请多包涵

keyPropertry=id,数据库对应实体类的中的属性名。
还有一个keyCoiumn=id,数据库中主键的字段名。
这里id需要对应上

新手上路,请多包涵

可以使用通用Mapper 在Model 的主键上加 @Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

为什么不用mybatis的代码生成工具(generatoryConfig.xml),这里面会给你自动生成 insertSelective这个方法,需要新增时返回主键id,只需要在配置generatoryConfig.xml这个里面的表时加上sqlStatement="SELECT @@IDENTITY" ,就会自己给你生成,有工具用工具可以加快自己的开发速度
clipboard.png
而且你这个id要和你实体中的id对应

报错说的很明白了,应该是你的id跟实体里的id没对应上

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题