mybatis的insert语句错误-Error getting generated key or setting result to parameter object.
今天在使用mybatis操作达梦6数据库insert时候遇到了一个问题,同样语句其他数据库并没有遇到的这个问题,错误信息如下:
Caused by: org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException at org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator.processBatch(Jdbc3KeyGenerator.java:66) at org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator.processAfter(Jdbc3KeyGenerator.java:45) at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:69) at org.apache.ibatis.executor.ReuseExecutor.doUpdate(ReuseExecutor.java:50) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:105) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) at com.sun.proxy.$Proxy50.update(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:152) at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:141) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358) ... 63 more Caused by: java.lang.NullPointerException at org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator.processBatch(Jdbc3KeyGenerator.java:55) ... 81 more
mybatis配置如下:
<insert id="addRecord" parameterType="java.util.Map"> insert into ${table_name}(${col_name}) values ${col_value} </insert>
我的mybatis使用的是3.2.8版本,这张表呢是没有设置主键的,错误说是因为返回的key空造成的,其实挺纳闷的,mybatis的insert语句useGeneratedKeys属性默认是false,不应该返回主键的啊,那么我只有手动添加上去useGeneratedKeys="false" ,结果就可以了,如下:
<insert id="addRecord" parameterType="java.util.Map" useGeneratedKeys="false" > insert into ${table_name}(${col_name}) values ${col_value} </insert>
如果要有需要返回插入数据的主键,如下配置mapper接口中返回值int接收即可:
<insert id="addCheckResReturnID" useGeneratedKeys="true" keyProperty="exeId" parameterType="java.util.Map">
INSERT INTO ${table_name}
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="exeId != null" >
EXE_ID,
</if>
<if test="checkId != null" >
CHECK_ID,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="exeId != null" >
#{exeId,jdbcType=BIGINT},
</if>
<if test="checkId != null" >
#{checkId,jdbcType=BIGINT},
</if>
</trim>
</insert>
后续有更高版本的mybatis应该也可以了吧
发表吐槽
你肿么看?
既然没有吐槽,那就赶紧抢沙发吧!