我在从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>();
是错误的,但我对此不确定。
任何建议或提示都会非常有用!非常感谢!
答案 0 :(得分:1)
从数据库中获取自动生成的密钥从未进行过标准化,因此它往往是特定于数据库的。对于Oracle,您需要首先从序列中选择新的键值,执行插入并返回结果。 This question为MyBatis项目提供了真正的石油。
一些最新的Java ER映射框架正在透明地处理它。例如,Spring JDBC Template有一个GeneratedKeyHolder对象,它抽象数据库工作。有关示例,请参阅this question。