• mybatis 关联查询多个类型相同对象


    场景:

    一条会议申请信息中有会议组织人id、会议记录人id、会议审核人id,这三个id都都对应staff表中的staff_id。

    需求:查询返回会议申请信息且能够得到组织人、记录人、审核人的姓名、部门、年龄等信息。

    实体类结构:

    public class Meeting_msg {

     
    private Staff meetingOrganizerEntity;
    private Staff meetingRecorderEntity;
    private Staff meetingCheckerEntity;
        
       private String meeting_id;
       ...
    }
    public class Staff {
      private String staffId;
       private String staffName;
       private String staffDepartment;
    ...
    }

    一、注解法:

    1.在 StaffMapper 中新建 Staff getStaffById(String staffId); 

    @Select("Select * from staff where staff_id = #{staffId}")
        @Results({
                @Result(property = "staffId",  column = "staff_id"),
                @Result(property = "staffName",  column = "staff_name")
        })
        Staff getStaffById(String staffId);

    2. Meeting_msgMapper 中新建 Meeting_msg loadMeetingMsgByMeetingId(String meeting_id);

    @Select("select * from meeting_msg where meeting_id = #{meeting_id}")
        @Results({
                @Result(property = "meetingId",  column = "meeting_id"),
                @Result(property = "meetingName",  column = "meeting_name"),
                @Result(property = "meetingType",  column = "meeting_type"),
                @Result(property = "roomId",  column = "room_id"),
                @Result(property = "meetingData",  column = "meeting_data"),
                @Result(property = "meetingStartTime",  column = "meeting_start_time"),
                @Result(property = "meetingEndTime",  column = "meeting_end_time"),
                @Result(property = "meetingOrganizer",  column = "meeting_organizer"),
                @Result(property = "meetingDepartment",  column = "meeting_department"),
                @Result(property = "meetingRecorder",  column = "meeting_recorder"),
                @Result(property = "meetingChecker",  column = "meeting_checker"),
                @Result(property = "meetingAttachmentFileId",  column = "meeting_attachment_file_id"),
                @Result(property = "meetingAttachmentFile",  column = "meeting_attachment_file"),
                @Result(property = "meetingContent",  column = "meeting_content"),
                @Result(property = "meetingRequirement",  column = "meeting_requirement"),
                @Result(property = "meetingStatue",  column = "meeting_statue"),
                @Result(property = "meetingRecordAttendeeState",  column = "meeting_record_attendee_state"),
                @Result(property = "meetingRecordMinuteState",  column = "meeting_record_minute_state"),
                @Result(property = "meetingRecordPresentationState",  column = "meeting_record_presentation_state"),
                @Result(property="meetingOrganizerEntity",column="meeting_organizer",one=@One(select="com.example.meeting.mapper.StaffMapper.getStaffById")),
                @Result(property="meetingRecorderEntity",column="meeting_recorder",one=@One(select="com.example.meeting.mapper.StaffMapper.getStaffById")),
                @Result(property="meetingCheckerEntity",column="meeting_checker",one=@One(select="com.example.meeting.mapper.StaffMapper.getStaffById"))
        })
        Meeting_msg loadMeetingMsgByMeetingId(String meeting_id);
    @Result(property="meetingOrganizerEntity",column="meeting_organizer",one=@One(select="com.example.meeting.mapper.StaffMapper.getStaffById"))该语句给
    meetingOrganizerEntity注入值。
    property:要注入值实体对象
    column:作为getStaffById方法的参数
    one=@One:表示一对一

    二、xml法:

    用了3个association尝试了很长时间都失败了,三个实体返回的值是相同的,还要研究。
  • 相关阅读:
    Redis
    双向绑定篇
    Vue篇1
    css篇-页面布局-三栏布局
    css篇-简化版
    Promise篇
    几道JS代码手写面试题
    安全篇
    Vue篇
    跨域篇--JSONP原理
  • 原文地址:https://www.cnblogs.com/ssyh/p/12332093.html
Copyright © 2020-2023  润新知