如何从MyBatis获取价值?

时间:2016-04-29 08:04:11

标签: java oracle10g mybatis

我在从myBatis检索属性时遇到问题。它说4578.35。我想要的是从结果映射中只获取java.lang.NullPointerException,它是在使用函数将值插入数据库后自动生成的(我使用的是oracle 10g)。

我的映射器中的代码如下

user_id

这是<resultMap type="User" id="userMap"> <result property="userId" column="user_id"/> <result property="someProperty1" column="property_1"/> <result property="someProperty2" column="property_2"/> </resultMap> <insert id="addUser" parameterType="map" statementType="CALLABLE"> { CALL #{userResult, javaType=java.sql.ResultSet, jdbcType=CURSOR, mode=OUT, resultMap=userMap} := PROJECT.create_user( #{surname, javaType=String, jdbcType=VARCHAR, mode=IN}, #{givenName, javaType=String, jdbcType=VARCHAR, mode=IN}, #{middleName, javaType=String, jdbcType=VARCHAR, mode=IN} )} </insert> 出现的地方

java.lang.NullPointerException

我正在使用return Integer.parseInt(paramMap.get("userId").toString()); 似乎我使用private Map<String, Object> paramMap = new HashMap<String, Object>();是错误的,但我对此不确定。

任何建议或提示都会非常有用!非常感谢!

1 个答案:

答案 0 :(得分:1)

从数据库中获取自动生成的密钥从未进行过标准化,因此它往往是特定于数据库的。对于Oracle,您需要首先从序列中选择新的键值,执行插入并返回结果。 This question为MyBatis项目提供了真正的石油。

一些最新的Java ER映射框架正在透明地处理它。例如,Spring JDBC Template有一个GeneratedKeyHolder对象,它抽象数据库工作。有关示例,请参阅this question