1. MyBatis 核心配置(自动下划线转驼峰)
文件路径:resources/mybatis/mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<configuration>
<settings>
<!-- 开启数据库下划线自动映射为Java驼峰命名 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="logImpl" value="SLF4J"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
</settings>
</configuration>
2. 前端展示 VO 类
文件路径:com/dkd/manage/domain/vo/RegionVo.java
package com.dkd.manage.domain.vo;
import com.dkd.manage.domain.Region;
import lombok.Data;
/**
* 区域信息扩展类(包含点位数量)
*/
@Data
public class RegionVo extends Region {
/**
* 点位数量
* 对应数据库字段:node_count
*/
private Integer nodeCount;
}
3. Mapper XML (核心 SQL)
文件路径:resources/mapper/RegionMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dkd.manage.mapper.RegionMapper">
<!--
查询区域列表(带点位数量统计)
1. 左连接:保留所有区域
2. 子查询:统计每个区域的点位数量
3. 支持区域名称模糊查询
-->
<select id="selectRegionList" resultType="com.dkd.manage.domain.vo.RegionVo">
select
r.id,
r.region_name,
r.remark,
n.node_count
from tb_region r
left join (
select region_id, count(*) as node_count
from tb_node
group by region_id
) n on r.id = n.region_id
<where>
<if test="regionName != null and regionName != ''">
and r.region_name like concat('%', #{regionName}, '%')
</if>
</where>
</select>
</mapper>
4. Mapper 接口
文件路径:com/dkd/manage/mapper/RegionMapper.java
package com.dkd.manage.mapper;
import com.dkd.manage.domain.Region;
import com.dkd.manage.domain.vo.RegionVo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface RegionMapper {
/**
* 查询区域列表(带点位数量)
*/
List<RegionVo> selectRegionList(Region region);
}
5. Service 接口
文件路径:com/dkd/manage/service/IRegionService.java
package com.dkd.manage.service;
import com.dkd.manage.domain.Region;
import com.dkd.manage.domain.vo.RegionVo;
import java.util.List;
public interface IRegionService {
/**
* 查询区域列表(带点位数量)
*/
List<RegionVo> queryRegionListWithNodeCount(Region region);
}
6. Service 实现类(核心业务方法)
文件路径:com/dkd/manage/service/impl/RegionServiceImpl.java
package com.dkd.manage.service.impl;
import com.dkd.manage.domain.Region;
import com.dkd.manage.domain.vo.RegionVo;
import com.dkd.manage.mapper.RegionMapper;
import com.dkd.manage.service.IRegionService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class RegionServiceImpl implements IRegionService {
@Resource
private RegionMapper regionMapper;
/**
* 查询区域列表(包含点位数量)
* @param region 查询条件
* @return 带点位统计的区域列表
*/
@Override
public List<RegionVo> queryRegionListWithNodeCount(Region region) {
// 调用Mapper执行关联查询,返回带点位数的区域列表
return regionMapper.selectRegionList(region);
}
}
7. Controller 层
文件路径:com/dkd/manage/controller/RegionController.java
package com.dkd.manage.controller;
import com.dkd.common.core.controller.BaseController;
import com.dkd.common.core.page.TableDataInfo;
import com.dkd.manage.domain.Region;
import com.dkd.manage.domain.vo.RegionVo;
import com.dkd.manage.service.IRegionService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/manage/region")
public class RegionController extends BaseController {
@Resource
private IRegionService regionService;
/**
* 查询区域列表(带点位数量)
* 支持:分页、名称模糊查询
*/
@PreAuthorize("@ss.hasPermi('manage:region:list')")
@GetMapping("/list")
public TableDataInfo list(Region region) {
// 开启分页
startPage();
// 调用业务方法
List<RegionVo> list = regionService.queryRegionListWithNodeCount(region);
// 返回分页数据
return getDataTable(list);
}
}
8. 前端表格字段
文件路径:vue页面
<el-table-column label="区域名称" prop="regionName" />
<el-table-column label="备注" prop="remark" />
<el-table-column label="点位数量" prop="nodeCount" />