簡體   English   中英

Java MyBatis變異返回的對象/自定義映射器

[英]Java MyBatis mutate returned object / custom mapper

給出以下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()處理結果之后,不確定如何執行此操作。

我找到了答案,可以設置結果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));
    }
}

暫無
暫無

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

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