【问题标题】:How to get the value from MyBatis?如何从 MyBatis 中获取价值?
【发布时间】:2016-08-24 07:02:37
【问题描述】:

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

我的映射器中的代码如下

<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&lt;String, Object&gt; paramMap = new HashMap&lt;String, Object&gt;(); 似乎我使用了paramMap.get("userId") 是错误的,但我不确定。

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

【问题讨论】:

  • 可能paramMapuserId为null,你可以调试看看哪个为null。
  • 好的,谢谢@Reno!

标签: java oracle10g mybatis


【解决方案1】:

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

一些较新的 Java ER 映射框架正在透明地处理这个问题。例如 Spring JDBC Template 有一个 GeneratedKeyHolder 对象,它抽象了数据库工作。示例见this question

【讨论】:

    猜你喜欢
    • 2017-10-01
    • 2018-04-07
    • 2021-12-26
    • 1970-01-01
    • 2012-11-29
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多