簡體   English   中英

如何在MyBatis中映射AtomicLong?

[英]How to map AtomicLong in MyBatis?

我在MyBatis中使用xml映射器文件將所有POJO類推入數據庫。 但是,這些對象之一將AtomicLong作為字段,而MyBatis似乎不知道如何處理它。

我嘗試為POJO類做一個非常標准的映射器,並且有一個resultMap看起來像這樣:

<resultMap id="result" type="MyPojo">
   <result property="myAtomicLongVal" column="myLongValColumn"/>
</resultMap>

當我這樣做時,我收到一條錯誤消息。

org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML.  Cause: java.lang.IllegalStateException:  No typehandler found for property myAtomicLongVal

AtomicLong沒有內置的類型處理程序,因此您可能需要編寫一個。

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.concurrent.atomic.AtomicLong;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;

@MappedTypes(AtomicLong.class)
public class AtomicLongTypeHandler
    extends BaseTypeHandler<AtomicLong>{
  @Override
  public void setNonNullParameter(PreparedStatement ps, int i,
      AtomicLong parameter, JdbcType jdbcType)
      throws SQLException {
    ps.setLong(i, parameter.get());
  }

  @Override
  public AtomicLong getNullableResult(ResultSet rs,
    String columnName) throws SQLException {
    return new AtomicLong(rs.getLong(columnName));
  }

  @Override
  public AtomicLong getNullableResult(ResultSet rs,
    int columnIndex) throws SQLException {
    return new AtomicLong(rs.getLong(columnIndex));
  }

  @Override
  public AtomicLong getNullableResult(CallableStatement cs,
    int columnIndex) throws SQLException {
    return new AtomicLong(cs.getLong(columnIndex));
  }
}

您可以在配置中全局注冊類型處理程序。 例如

<typeHandlers>
  <typeHandler handler="pkg.AtomicLongTypeHandler" />
</typeHandlers>

結果圖應按原樣工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM