0

我有一个使用自动生成的列生成的表,但我无法使用 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,我相信这是插入的记录数。我确定我遗漏了一些明显的东西,但看不到树木的树木。

4

2 回答 2

1

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

基本上,您必须在 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();
}
于 2011-07-15T16:47:07.473 回答
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>
于 2011-07-15T16:36:03.930 回答