mybatisPlus實(shí)現(xiàn)多表連接分頁動態(tài)查詢方式
更新時(shí)間:2025年12月24日 16:34:42 作者:紅顏い笑傾城
文章主要講述了Java開發(fā)中常用的一些設(shè)計(jì)模式和代碼結(jié)構(gòu),包括實(shí)體類(VO)、Mapper接口、Service實(shí)現(xiàn)類(ServiceImpl)等,通過這些組件的合理使用,可以提高代碼的可維護(hù)性和可擴(kuò)展性
mybatisPlus多表連接分頁動態(tài)查詢
實(shí)體類
package com.byx.communitycontrol.common.entity.baseinfo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
* 點(diǎn)位信息
**/
@Data
@TableName(value = "T_DWXX")
public class PointInfo implements Serializable {
/**
* 相機(jī)編碼
*/
@TableField(value = "CAMERAINDEXCODE")
private String cameraIndexCode;
/**
* 點(diǎn)位名稱
*/
@TableField(value = "NAME")
private String name;
/**
* 區(qū)域編碼
*/
@TableField(value = "UNITINDEXCODE")
private String unitIndexCode;
/**
* 國標(biāo)編碼
*/
@TableField(value = "GBINDEXCODE")
private String gbIndexCode;
/**
* 設(shè)備編碼
*/
@TableField(value = "DEVICEINDEXCODE")
private String deviceIndexCode;
/**
* 緯度
*/
@TableField(value = "LATITUDE")
private String latitude;
/**
* 經(jīng)度
*/
@TableField(value = "LONGITUDE")
private String longitude;
/**
* 高度
*/
@TableField(value = "ALTITUDE")
private String altitude;
/**
* 像素
*/
@TableField(value = "PIXEL")
private Integer pixel;
/**
* 相機(jī)類別
*/
@TableField(value = "CAMERATYPE")
private Integer cameraType;
/**
* 安裝位置
*/
@TableField(value = "INSTALLPLACE")
private String installPlace;
/**
* 矩陣編號
*/
@TableField(value = "MATRIXCODE")
private String matrixCode;
/**
* 頻道號
*/
@TableField(value = "CHANNUM")
private Integer chanNum;
/**
* 查看棚
*/
@TableField(value = "VIEWSHED")
private String viewShed;
/**
* 能力集
*/
@TableField(value = "CAPABILITYSET")
private String capabilitySet;
/**
* 智能套裝
*/
@TableField(value = "INTELLIGENTSET")
private String intelligentSet;
/**
* 記錄位置
*/
@TableField(value = "RECORDLOCATION")
private String recordLocation;
/**
* 云臺控制
*/
@TableField(value = "PTZCONTROLLER")
private String ptzController;
/**
* 設(shè)備資源類型
*/
@TableField(value = "DEVICERESOURCETYPE")
private String deviceResourceType;
/**
* 信道類型
*/
@TableField(value = "CHANNELTYPE")
private String channelType;
/**
* 轉(zhuǎn)換類型
*/
@TableField(value = "TRANSTYPE")
private Integer transType;
/**
* 更新時(shí)間
*/
@TableField(value = "UPDATETIME")
private String updateTime;
/**
* 創(chuàng)建時(shí)間
*/
@TableField(value = "CREATETIME")
private String createTime;
/**
* 狀態(tài)
*/
@TableField(value = "STATUS")
private Integer status;
/**
* 相機(jī)類型名稱
*/
@TableField(value = "CAMERATYPENAME")
private String cameraTypeName;
/**
* 能力集名稱
*/
@TableField(value = "CAPABILITYSETNAME")
private String capabilitySetName;
/**
* 智能設(shè)置名稱
*/
@TableField(value = "INTELLIGENTSETNAME")
private String intelligentSetName;
/**
* 記錄位置名稱
*/
@TableField(value = "RECORDLOCATIONNAME")
private String recordLocationName;
/**
* 云臺控制名稱
*/
@TableField(value = "PTZCONTROLLERNAME")
private String ptzControllerName;
/**
* 設(shè)備資源類型名稱
*/
@TableField(value = "DEVICERESOURCETYPENAME")
private String deviceResourceTypeName;
/**
*
* 頻道類型名稱
*/
@TableField(value = "CHANNELTYPENAME")
private String channelTypeName;
/**
* 轉(zhuǎn)換類型名稱
*/
@TableField(value = "TRANSTYPENAME")
private String transTypeName;
/**
* 條約類型
*/
@TableField(value = "TREATYTYPE")
private String treatyType;
/**
* 條約類型名稱
*/
@TableField(value = "TREATYTYPENAME")
private String treatyTypeName;
/**
* 狀態(tài)名稱
*/
@TableField(value = "STATUSNAME")
private String statusName;
}
VO類
package com.byx.communitycontrol.common.vo;
import com.byx.communitycontrol.common.entity.baseinfo.PointInfo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = true)
public class PointInfoVo extends PointInfo implements Serializable {
/**
* 相機(jī)名稱
*/
private String cameraName;
/**
* 區(qū)域名稱
*/
private String qyName;
/**
* IP
*/
private String complexIp;
/**
* 上級IP
*/
private String parentIp;
}
mapper接口
package com.byx.communitycontrol.gm.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.byx.communitycontrol.common.entity.baseinfo.PointInfo;
import com.byx.communitycontrol.common.vo.PointInfoVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface PointInfoMapper extends BaseMapper<PointInfo> {
//常規(guī)寫法
@Select("SELECT\n" +
"\td.CAMERAINDEXCODE,\n" +
"\td.NAME,\n" +
"\td.UNITINDEXCODE,\n" +
"\td.GBINDEXCODE,\n" +
"\td.DEVICEINDEXCODE,\n" +
"\tqd.CAMERANAME,\n" +
"\tqx.NAME AS qyname,\n" +
"\td.STATUS,\n" +
"\td.STATUSNAME,\n" +
"\td.LATITUDE,\n" +
"\td.LONGITUDE,\n" +
"\td.ALTITUDE,\n" +
"\ti.COMPLEXIP,\n" +
"\ti.PARENTIP,\n" +
"\td.CREATETIME,\n" +
"\td.UPDATETIME \n" +
"FROM\n" +
"\tT_DWXX d\n" +
"\tLEFT JOIN T_DWXXIP i ON d.CAMERAINDEXCODE = i.CAMERAINDEXCODE\n" +
"\tLEFT JOIN T_QY_DW qd ON d.CAMERAINDEXCODE = qd.CAMERAINDEXCODE\n" +
"\tLEFT JOIN T_QYXX qx ON d.UNITINDEXCODE = qx.INDEXCODE \n" +
"${ew.customSqlSegment} " +
"ORDER BY\n" +
"\td.UPDATETIME DESC")
IPage<PointInfoVo> getPointInfoPageList(Page<?> page, @Param("ew") Wrapper wrapper);
//可返回一個List集合,之后再用page.setRecords()方法將集合set進(jìn)去
@Select("SELECT\n" +
"\td.CAMERAINDEXCODE,\n" +
"\td.NAME,\n" +
"\td.UNITINDEXCODE,\n" +
"\td.GBINDEXCODE,\n" +
"\td.DEVICEINDEXCODE,\n" +
"\tqd.CAMERANAME,\n" +
"\tqx.NAME AS qyname,\n" +
"\td.STATUS,\n" +
"\td.STATUSNAME,\n" +
"\td.LATITUDE,\n" +
"\td.LONGITUDE,\n" +
"\td.ALTITUDE,\n" +
"\ti.COMPLEXIP,\n" +
"\ti.PARENTIP,\n" +
"\td.CREATETIME,\n" +
"\td.UPDATETIME \n" +
"FROM\n" +
"\tT_DWXX d\n" +
"\tLEFT JOIN T_DWXXIP i ON d.CAMERAINDEXCODE = i.CAMERAINDEXCODE\n" +
"\tLEFT JOIN T_QY_DW qd ON d.CAMERAINDEXCODE = qd.CAMERAINDEXCODE\n" +
"\tLEFT JOIN T_QYXX qx ON d.UNITINDEXCODE = qx.INDEXCODE \n" +
"${ew.customSqlSegment} " +
"ORDER BY\n" +
"\td.UPDATETIME DESC")
List<PointInfoVo> getPointInfoPageList(Page<?> page, @Param("ew") Wrapper wrapper);
//可用實(shí)體屬性代替查詢元素
@Select("SELECT\n" +
"\td.*,\n" +
"\tqd.cameraName,\n" +
"\tqx.name AS qyName,\n" +
"\ti.complexIp,\n" +
"\ti.parentIp \n" +
"FROM\n" +
"\tT_DWXX d\n" +
"\tLEFT JOIN T_DWXXIP i ON d.cameraIndexCode = i.cameraIndexCode\n" +
"\tLEFT JOIN T_QY_DW qd ON d.cameraIndexCode = qd.cameraIndexCode\n" +
"\tLEFT JOIN T_QYXX qx ON d.unitIndexCode = qx.indexCode \n" +
"${ew.customSqlSegment} " +
"ORDER BY\n" +
"\td.updateTime DESC")
IPage<PointInfoVo> getPointInfoPageList(Page<?> page, @Param("ew") Wrapper wrapper);
}
serviceImpl類
package com.byx.communitycontrol.gm.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.byx.communitycontrol.common.entity.AppPage;
import com.byx.communitycontrol.common.entity.baseinfo.PointInfo;
import com.byx.communitycontrol.common.request.PointInfoPageReq;
import com.byx.communitycontrol.common.vo.PointInfoVo;
import com.byx.communitycontrol.context.helper.MyBatisPlusPageImpl;
import com.byx.communitycontrol.gm.mapper.PointInfoMapper;
import com.byx.communitycontrol.gm.service.IPointInfoService;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
@Service
public class PointInfoServiceImpl extends ServiceImpl<PointInfoMapper, PointInfo> implements IPointInfoService {
@Resource
private PointInfoMapper pointInfoMapper;
@Override
public AppPage<PointInfoVo> findListByPageCondition(PointInfoPageReq request) {
Page<PointInfoVo> page = new Page(request.getCurrentPage(), request.getPageSize());
//方法一:
QueryWrapper<PointInfoVo> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.hasText(request.getDwName()), "name", request.getDwName());
queryWrapper.like(StringUtils.hasText(request.getQyName()), "qyName", request.getQyName());
queryWrapper.eq(request.getStatus() != null, "status", request.getStatus());
List<PointInfoVo> pointInfoPageList = pointInfoMapper.getPointInfoPageList(page, queryWrapper);
Page<PointInfoVo> pointInfoVoPage = page.setRecords(pointInfoPageList);
//方法二:
QueryWrapper<PointInfoVo> eq = Wrappers.query(new PointInfoVo()).like(StringUtils.hasText(request.getDwName()),
"d.name",
request.getDwName()).like(StringUtils.hasText(request.getQyName()), "qx.name",
request.getQyName()).eq(request.getStatus() != null, "d.status", request.getStatus());
IPage<PointInfoVo> pointInfoPageList = pointInfoMapper.getPointInfoPageList(page, eq);
方法三:可將 Wrappers.query(new PointInfoVo()).like(...)... 換成 Wrappers.lambdaQuery(PointInfoVo.class).like(StringUtils.hasText(request.getDwName()),PointInfoVo::getName,
request.getDwName())...
return new MyBatisPlusPageImpl<>(pointInfoPageList);
}
}
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Java對象序列化為什么要使用SerialversionUID
這篇文章主要介紹了詳解Java對象序列化為什么要使用SerialversionUID,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
java 中數(shù)據(jù)庫連接的JDBC和驅(qū)動程序的深入分析
這篇文章主要介紹了java 中數(shù)據(jù)庫連接的JDBC和驅(qū)動程序的深入分析的相關(guān)資料,需要的朋友可以參考下2017-04-04
Java實(shí)現(xiàn)動態(tài)規(guī)劃背包問題
本文主要介紹使用java實(shí)現(xiàn)動態(tài)規(guī)劃的背包問題,詳細(xì)使用圖文和多種案例進(jìn)行解析,幫助理解該算法2021-06-06
Java中枚舉的實(shí)現(xiàn)與應(yīng)用詳解
這篇文章主要介紹了Java中枚舉的實(shí)現(xiàn)與應(yīng)用詳解,EnumTest中還有一個VALUES數(shù)組,里面存儲著所有的枚舉實(shí)例,調(diào)用values方法時(shí)返回VALUES數(shù)組的clone,需要的朋友可以參考下2023-12-12
SpringBoot使用validator分組校驗(yàn)實(shí)現(xiàn)方式
本文詳細(xì)介紹了在SpringBoot中使用分組校驗(yàn)進(jìn)行數(shù)據(jù)驗(yàn)證的兩種方法:使用@Validated注解在控制器層進(jìn)行校驗(yàn)和使用ValidateUtil工具類在任意位置進(jìn)行手動校驗(yàn),通過合理使用驗(yàn)證組和驗(yàn)證方法,可以確保數(shù)據(jù)的正確性和一致性,提高應(yīng)用程序的健壯性和安全性2025-11-11

