使用MyBatis从DB2获取生成的密钥

时间:2011-07-15 16:22:54

标签: java mybatis

我有一个使用自动生成的列生成的表,但我无法使用MyBatis检索ID。我已通过测试证明SQL正在运行并且正在插入行,但我无法获取生成的ID。

XML配置是:

<insert id="insertRequestTrackingRow" parameterType="map">
    INSERT INTO XML_LOG_T (REQ_SRC_SYS_CDE, REQ_USR_ID, REQ_XML_DOC, ROW_CRT_DTM, ROW_UPDT_DTM)
    VALUES (#{sourceSystemCode}, #{userID}, #{message}, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
</insert>

在XML_LOG_T上是一个自动生成的列REQ_ID。我的映射器界面是:

public interface UdbDataMapper {
    int insertRequestTrackingRow(
            @Param("message") String message,
            @Param("sourceSystemCode") String sourceSystemCode,
            @Param("userID") String userID);
}

返回的内容始终为1,我相信是插入的记录数。我确定我错过了一些明显但却看不到树木的木材。

2 个答案:

答案 0 :(得分:1)

这是一个很好的explanation如何做到这一点。

基本上,您必须在XML配置中为INSERT语句使用useGeneratedKeys =“true”和keyproperty =“keyfield”属性。然后将返回的键字段值插入到参数对象中,并可以从那里检索。类似下面的代码示例应该可以工作:

SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("sqlConfig.xml"));
SqlSession sess = sqlMapper.openSession();
try {
   Map<String,String> paramObj = new HashMap<String,String>();
   paramObj.put("param1", "value");
   int result = sess.insert("insertRequestTrackingRow", paramObj);
   System.out.println("REQ_ID: " + paramObj.get("REQ_ID"));
}
finally {
   sess.close();
}

答案 1 :(得分:0)

怎么样

<insert id="insertRequestTrackingRow" parameterType="map" 
        useGeneratedKeys="true" keyProperty="id">
    INSERT INTO XML_LOG_T (REQ_SRC_SYS_CDE, REQ_USR_ID, REQ_XML_DOC, ROW_CRT_DTM, ROW_UPDT_DTM)
    VALUES (#{sourceSystemCode}, #{userID}, #{message}, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
</insert>