Mybatis-plus 多表查詢


 
ActivitySignServiceImpl.java
@Service
@Slf4j
public class ActivitySignServiceImpl extends ServiceImpl<ActivitySignMapper, ActivitySign> implements IActivitySignService {
@Autowired(required = false)
private ActivitySignMapper signMapper;

/**
 * 獲取我的活動 - 未簽到活動列表
 */
@Override
public ApiResponse getMyActivityListNoSign(ActivityStatusBo bo) {
    if(ObjectUtil.isNull(bo)){
        return ApiResponse.ofFailMessage(COMMON_FAILURE);
    }
    User user = ShiroUtils.getCurrentUser();
    Page<ActivitySignVo> page = signMapper.getPageActivityNoSign(new Page(bo.getPageNum(),bo.getPageSize()),user.getUid(), LocalDateTime.now());
    List<ActivitySignVo> records = page.getRecords();
    //沒有查到滿足條件的活動
    if(CollectionUtil.isEmpty(records)){
        return ApiResponse.ofSuccess(records);
    }

    List<ActivitySignVo> voList = records.stream()
            .map(any -> BeanUtil.toBean(any, ActivitySignVo.class))
            .collect(Collectors.toList());

    return ApiResponse.ofSuccess(voList);
}
}

 

 

ActivitySignMapper.java
此處有兩種方式實現數據庫操作
1、是用@Select方式,不用寫xml了
2、是用xml方式
這兩種方式xml都要寫對應查出的數據字段綁定
public interface ActivitySignMapper extends BaseMapper<ActivitySign> {
//    @Select("SELECT t1.sign_flag,t2.* FROM activity_sign t1 left join activity_info t2 on t1.activity_uid = t2.uid\n" +
//            "where t1.customer_uid = #{customerUid} and t2.state = '1'  and t2.end_time > #{nowDateTime} and t1.sign_flag = '0' ")
//    @ResultMap("activitySignVo")
    Page<ActivitySignVo> getPageActivityNoSign(Page<ActivitySignVo> ipage, @Param("customerUid") String customerUid, @Param("nowDateTime") LocalDateTime nowDateTime);

//    @Select("SELECT t1.sign_flag,t2.* FROM activity_sign t1 left join activity_info t2 on t1.activity_uid = t2.uid \n" +
//            "where  t1.customer_uid = #{customerUid} and (t1.sign_flag = '1' or (t2.sign_flag = '0' and t2.end_time < #{nowDateTime}) )")
//    @ResultMap("activitySignVo")
    Page<ActivitySignVo> getPageActivityFinish(Page<ActivitySignVo> ipage , @Param("customerUid") String customerUid, @Param("nowDateTime") LocalDateTime nowDateTime);
}

 

 

ActivitySignMapper.xml

<mapper namespace="com.xypopo.market.mapper.ActivitySignMapper">
    <resultMap id="activitySignVo" type="com.xypopo.market.pojos.vo.ActivitySignVo">
        <!-- 主鍵字段 -->
        <id property="signFlag" column="sign_flag"></id>
        <result property="uid" column="uid"></result>
        <result property="startTime" column="start_time" javaType="java.time.LocalDateTime"></result>
        <result property="endTime" column="end_time" javaType="java.time.LocalDateTime"></result>
        <result property="storeUid" column="store_uid"></result>
        <result property="title" column="title"></result>
        <result property="cover" column="cover"></result>
        <result property="address" column="address"></result>
        <result property="state" column="state"></result>
    </resultMap>


    <select id="getPageActivityFinish" resultMap="activitySignVo">
        SELECT t1.sign_flag,t2.* FROM activity_sign t1 left join activity_info t2 on t1.activity_uid = t2.uid
        where  t1.customer_uid = #{customerUid} and (t1.sign_flag = '1' or (t2.sign_flag = '0' and t2.end_time &lt; #{nowDateTime}))
    </select>
    <select id="getPageActivityNoSign" resultMap="activitySignVo">
        SELECT t1.sign_flag,t2.* FROM activity_sign t1 left join activity_info t2 on t1.activity_uid = t2.uid
           where t1.customer_uid = #{customerUid} and t2.state = '1'  and t2.end_time &gt; #{nowDateTime} and t1.sign_flag = '0'
    </select>
</mapper>

 

 
綁定接收查出的數據字段的對象
ActivitySignVo.java
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("activity_sign")
public class ActivitySignVo implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("簽到狀態:0-未簽到 ; 1-已簽到")
    private String signFlag;

    @ApiModelProperty("活動ID")
    private String uid;

    @ApiModelProperty("活動名稱")
    private String name;

    @ApiModelProperty("活動開始時間")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startTime;

    @ApiModelProperty("活動結束時間")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endTime;

    @ApiModelProperty("活動門店id")
    private String storeUid;

    @ApiModelProperty("活動標題")
    private String title;

    @ApiModelProperty("活動封面圖")
    private String cover;

    @ApiModelProperty("活動地址")
    private String address;

    @ApiModelProperty("活動狀態:1-正常 ; 1-結束 ; 3-提前結束")
    private String state;
}

 

此處功能是實現接口查出我的活動未簽到和已結束活動,用到了分頁插件,需要關聯用戶報名的活動記錄表和活動詳情表查詢出活動的詳情和用戶簽到的標識,用聯表查詢實現
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM