[英]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.