当前位置: 首页 > article >正文

Mybatis中字段返回值映射问题

需求说明:
返回值列表扩展字段值,不改变原有代码的基础上,增加返回值

编写类VO: 

public class RegionVO extends Region {
    //点位数量
    private Integer nodeCount;

    public Integer getNodeCount() {
        return nodeCount;
    }

    public void setNodeCount(Integer nodeCount) {
        this.nodeCount = nodeCount;
    }
}

 mapper.xml

<select id="selectRegionVOList" resultType="com.dkd.manage.vo.RegionVO">
        SELECT
        r.*,
        count( n.id ) AS node_count
        FROM
        tb_region r
        LEFT JOIN tb_node n ON r.id = n.region_id
        GROUP BY
        r.id
        <where>
            <if test="regionName != null  and regionName != ''"> and region_name like concat('%', #{regionName}, '%')</if>
        </where>
    </select>

controller类:

@RestController
@RequestMapping("/manage/region")
public class RegionController extends BaseController
{
    @Autowired
    private IRegionService regionService;

    /**
     * 查询区域管理列表
     */
    @PreAuthorize("@ss.hasPermi('manage:region:list')")
    @GetMapping("/list")
    public TableDataInfo list(Region region)
    {
        startPage();
        List<RegionVO> voList = regionService.selectRegionVOList(region);
        return getDataTable(voList);
    }
}

浏览器测试结果:

正常情况下也是可以的,但是当时测试的时候,始终缺少字段nodeCount ;

在这里我们可以换种方案:

修改mapper.xml文件

  <resultMap id="RegionVOResult" type="com.dkd.manage.vo.RegionVO">
        <result property="id"    column="id"    />
        <result property="regionName"    column="region_name"    />
        <result property="remark"    column="remark"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateBy"    column="update_by"    />
        <result property="createTime"    column="create_time"    />
        <result property="updateTime"    column="update_time"    />
        <result property="nodeCount"    column="node_count"    />
    </resultMap>

    <select id="selectRegionVOList" resultMap="RegionVOResult">
        SELECT
        r.*,
        count( n.id ) AS node_count
        FROM
        tb_region r
        LEFT JOIN tb_node n ON r.id = n.region_id
        GROUP BY
        r.id
        <where>
            <if test="regionName != null  and regionName != ''"> and region_name like concat('%', #{regionName}, '%')</if>
        </where>
    </select>

再次运行,效果也是可以的!

扩展SQL: 

SELECT
	re.id,
	re.region_name,
	re.remark,
	IFNULL( tbc.node_count, 0 ) AS nodeCount,
	re.create_time 
FROM
	tb_region re
	LEFT JOIN ( SELECT region_id, count( 0 ) node_count FROM tb_node GROUP BY region_id ) tbc ON tbc.region_id = re.id 
	
	
	
	SELECT
	r.*,
	count( n.id ) AS node_count 
FROM
	tb_region r
	LEFT JOIN tb_node n ON r.id = n.region_id 
GROUP BY
	r.id


http://www.kler.cn/a/323777.html

相关文章:

  • 11.08-10.14谷粒商城
  • Tiktok对接和内容发布申请流程
  • 二分搜索的三种方法
  • Docker部署Kafka SASL_SSL认证,并集成到Spring Boot
  • nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录
  • 大模型研究报告 | 2024年中国金融大模型产业发展洞察报告|附34页PDF文件下载
  • XXL-JOB在SpringBoot中的集成
  • 【Redis】安装redis-plus-plus
  • Trick : pair 的二分问题
  • mariadb无法存储中文
  • Colorful/七彩虹将星X17 AT 22 Win11原厂OEM系统 带COLORFUL一键还原
  • 今年Java回暖了吗
  • 根据标签实现CD
  • HJ50-四则运算:栈的运用、中缀表达式转后缀表达式并计算结果
  • C++(9.26)
  • FastReport时间格式化(含判空)
  • Python办公自动化之Word
  • 探索未来:MultiOn,AI的下一个革命
  • 示例说明:elasticsearch实战应用
  • 等保托管怎么样,流程是什么样的?
  • 弹性盒模型关键几个点:
  • 【SQL】总结Select语句中用来连接字符串的方法
  • 万字长文详解FreeRTOS软件定时器
  • 机器学习:opencv--特征检测
  • 静态链接和动态链接的Golang二进制文件
  • 音视频入门基础:FLV专题(4)——使用flvAnalyser工具分析FLV文件