我怎样才能获得MyBatis的插入生成的密钥?我读了很多关于这个问题的页面,但我仍然被阻止,有人能帮助我吗?这是我的代码:
表格:
ID_ERROR long primary key
DATE timestamp
TYPE varchar
MESSAGE varchar
SOURCE varchar
道:
Long returnedId = 0L;
MyMapper myMapper = this.sqlSession.getMapper(MyMapper.class);
myMapper.insertRecord(returnedId, Utils.now(), t.getClass().getName(), t.getMessage(), c.getName());
return returnedId;
该mapper.java:
public void insertRecord(@Param("returnedId") Long returnedId, @Param("timestamp")Timestamp timestamp,@Param("type") String type,@Param("message") String message,@Param("source") String source);
mapper.xml
<insert id="insertRecord" parameterType="map" useGeneratedKeys="true" keyProperty="ID_ERROR">
INSERT INTO errors (
DATE,
TYPE,
MESSAGE,
SOURCE
)
VALUES (
#{timestamp},
#{type},
#{message},
#{source}
)
<selectKey resultType="long" order="AFTER" keyProperty="returnedId">
SELECT LAST_INSERT_ID() as returnedId
</selectKey>
</insert>
怎么了?我怎样才能得到这个插入的生成密钥?谢谢!
9条答案
按热度按时间vc9ivgsu1#
对我来说,它是这样工作的(mybatis 3.x).. id必须在mysql表中设置自动增量
注:
keyProperty="project.projectId"
和useGeneratedKeys="true"
我的界面是:
最后,为了获取值(将自动分配给pojo的id属性),我用途:
flseospp2#
你可以通过两种方式来实现这一点,
1.使用
useGeneratedKeys="true", keyProperty="id", keyColumn="id"
keyProperty
是指POJO变量名,keyColumn
是指数据库中生成的列名1.通过在insert标记中使用
<selectKey/>
p4rjhz4m3#
如果你看一下MyBatis的文档,至少useGeneratedKeys和keyProperty是你获取自动增量数据所需要的(对于某些数据库,你需要添加keyColumn)。
如您所见,useGeneratedKeys取决于dataBase的JDBC的getGeneretadKeys方法是否实现/如何实现。
例如,对于mysql或H2,getGeneretadKeys只支持一列。最后生成的键将是getGeneretadKeys返回的键。
总之,在您的情况下,您只需要添加useGeneratedKeys和keyProperty(使用ID_ERROR auto_increment):
Mapper.xml
Interface.java
如果你仍然在检索生成的Keys时遇到一些问题,请查看mysql的JDBC文档(旧版本可能没有实现getGeneretadKeys)。
h5qlskok4#
简单的解决方案:
使用
KeyProperty
属性作为objectName.AutoincrementId
如下所示...useGeneratedKeys="true", KeyProperty="person.id", KeyColumn="id"
6l7fqoea5#
在xml文件中,将其置于5行以下:
在Java main类中创建这个方法,并在main方法中调用它:
但是你应该自己创建PetDVO类。就是这样。
ubbxdtey6#
在Mapper Xml下,使用查询:
java 侧
bt1cpqcv7#
使用带有insert sql和RETURNING指示的Select注解。
下面的代码适用于Postgres,MyBatis 3.5.0。
参考:https://github.com/mybatis/mybatis-3/issues/1293
yacmzcpb8#
请按照以下步骤操作:
1.以id作为属性创建错误POJO
1.将returnId替换为错误,如下所示,
public void insertRecord(@Param(“error”)Error error,@Param(“timestamp”)Timestamp,@Param(“type”)String type,@Param(“message”)String message,@Param(“source”)String source);
1.将keyProperty=“ID_ERROR”更改为keyProperty=”error.id“
1.移除
您将在
error.id
中插入id
crcmnpdw9#
如果要获取生成的主键,则应通过
Map
或POJO Object
传递参数当调用Map方法时,将值Map。