我们需要使用NStringTypeHandler将i18n字符串持久存储到数据库的NVARCHAR字段中。

但是我查看了源代码,看起来它什么也没做。

public class NStringTypeHandler extends BaseTypeHandler {

public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType)
  throws SQLException {
     //    ps.setNString(i, ((String) parameter));
     ps.setString(i, ((String) parameter));
 }

 public Object getNullableResult(ResultSet rs, String columnName)
  throws SQLException {
     //    return rs.getNString(columnName);
     return rs.getString(columnName);
 }

 public Object getNullableResult(CallableStatement cs, int columnIndex)
  throws SQLException {
     //    return cs.getNString(columnIndex);
     return cs.getString(columnIndex);
 }

 }


也许,我模仿了一些东西。但是set / get NString在源代码中有注释。

最佳答案

NStringTypeHandler的实现看起来是错误的。 (应该支持国家字符集类型数据,但不支持)。

仅出于您的参考,主干中有一个更高版本的NStringTypeHandler,这次使用通用版本BaseTypeHandler作为其基类。但是,未删除未注释的行,也未在其中使用setNString

不幸的是,也没有可用的历史来解释未注释的行。该文件为checked-in with the commented lines

我的建议是submit an issue here(至少可以解释这个奇怪的实现)。

关于java - myBatis NStringTypeHandler的用途是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8559611/

10-10 14:42