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