我有表event和message,它们具有一对一的关系并由类表示:public class Event { private Long id; private Message message;}public class Message { private Long id;}并且有两个映射器:EventMapper和MessageMapper:public interface EventMapper { @Select("SELECT * FROM event WHERE date BETWEEN #{from} AND #{to}") @Results({ @Result(property = "id", column = "id"), @Result(property = "message", column = "message_id", javaType = Message.class, one = @One(select = "getMessage")) }) List<Event> selectInInterval(@Param("from") Date from, @Param("to") Date to); @Select("SELECT * FROM message WHERE id = #{id}") Message getMessage(@Param("id") Long id);}public interface MessageMapper { @Select("SELECT * FROM message WHERE id = #{id}") @Results({ @Result(property = "id", column = "id"), @Result(property = "text", column = "text") }) List<Event> selectById(@Param("id") Long id);}EventMapper选择事件并通过注释映射它们,getMessage用于选择和映射事件的消息。但是我已经有相同的方法selectById在MessageMapper,所以是有可能重新使用它?
1 回答

胡说叔叔
TA贡献1804条经验 获得超8个赞
为了使用来自其他映射器的任何定义,包括语句,或者ResultMap您应该namespace将映射器的(完全限定名称)包含到该实体的标识符中。
在您的示例中,假设它MessageMapper在com.company.app.mappers包中,它将是:
public interface EventMapper {
@Select("SELECT * FROM event WHERE date BETWEEN #{from} AND #{to}")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "message", column = "message_id",
javaType = Message.class,
one = @One(select = "com.company.app.mappers.MessageMapper.getMessage"))
})
List<Event> selectInInterval(@Param("from") Date from, @Param("to") Date to);
}
添加回答
举报
0/150
提交
取消