当前位置: 首页 > 知识库问答 >
问题:

Java MyBatis mutate返回对象/自定义映射器

朱锦
2023-03-14

给出以下SQL模式:

CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255)
)

我想要一个地图绘制者,比如:

interface PersonMapper {
    String getFullName(Object row) {
        return row.FirstName + " " + row.LastName;
    }

    @Results(id = "person", value = {
            @Result(column = "PersonID", javaType = Integer.class, property = "id"),
            @Result(column = "LastName", javaType = String.class, property = "lastName"),
            @Result(column = "FirstName", javaType = String.class, property = "firstName"),
            @Result(PersonMapper::getFullName, javaType = String.class, property = "fullName")
    })
    @Select("SELECT * FROM Persons")
    List<PersonEntity> getPersons();
}

所以我可以这样做:

public void someFunction() {
    List<PersonEntity> persons = personMapper.getPersons();
    log.info(persons.get(0).getFullName())
}

我不知道怎么做,除了在personMapper之后。getPersons()来操作结果。

共有1个答案

盛承
2023-03-14

我找到答案了,可以设置TypeHandler的结果:

    @Result(column = "DayOfWeek",
            javaType = Integer.class,
            property = "dayOfWeek",
            typeHandler = DayOfWeekTypeHandler.class),

然后定义TypeHandler:

public class DayOfWeekTypeHandler extends BaseTypeHandler<DayOfWeek> {
    @Override
    public void setNonNullParameter(
            PreparedStatement ps, int i, DayOfWeek parameter, JdbcType jdbcType
    ) throws SQLException {
        ps.setInt(i, parameter.getValue());
    }

    @Override
    public DayOfWeek getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return DayOfWeek.of(rs.getInt(columnName));
    }

    @Override
    public DayOfWeek getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return DayOfWeek.of(rs.getInt(columnIndex));
    }

    @Override
    public DayOfWeek getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return DayOfWeek.of(cs.getInt(columnIndex));
    }
}
 类似资料:
  • 我有一个用例,其中我需要维护两组JSON输出,一组具有JSON属性的漂亮名称,另一组没有。所以我决定自定义ObjectMapper,以便它忽略字段上的@JSONProperty(“pretty name”)注释,而使用字段属性名。在本例中,希望得到以下JSON输出 具有漂亮名称的JSON输出如下所示 我的ObjectMapper配置代码如下所示 我看了一些其他的答案,但对我不起作用。我得到了一个N

  • 初始化服务器时,出现以下错误: java.lang.IllegalStateException:无法将[java.lang.String]类型的值转换为属性“Object Mapper”所需的类型[org.codehaus.jackson.map.objectMapper]:在org.springframework.beans.typeConverterDelegate.ConvertifEmen

  • 我试图使用MapStruct在dto和实体对象之间映射convert,但是生成的映射器实现只返回空的映射对象。 BeermapperImpl 任何人都可以提供我的代码可能出错的地方?谢谢!

  • 我将 Jackson 2.7.5 与 Jersey 2.25.1 配合使用。我正在尝试修复现有的生产代码,当它在JSON输入中获得意外字段时,它现在因“无法识别的PropertyException:无法识别的字段”而失败。 在研究这个问题时,我发现了几篇旧帖子(5年),建议各种修复方法与我当前的代码非常不同。我不太关注这些,因为它们是针对旧版本的Jackson/Jersey。最近的建议,包括泽西岛

  • 问题内容: 我有两个C#类 和 在dbContext调用中使用它,以通过EF5映射数据库中的返回对象 我遇到的问题是,即使返回了地址数据,我似乎也无法获得映射的地址对象。searchResult映射的其他属性很好。 问题答案: SqlQuery不支持 您应该做的是:

  • 使用代替和代替 然后在请求属性中添加 但是当我在javascript中检索它时,我得到了jsonObject的值 我在我的项目中已经使用了下面的库,如果需要,可以使用任何新的库