Ruoyi多主键表的增删改查

Ruoyi框架默认是基于id进行数据库表删除和修改,实际场景中更多采用多key联合主键,这时需要对自动生成的模块进行细微调整,具体步骤如下。

1、mysql数据库表定义

sql 复制代码
CREATE TABLE `device_realtime` (
  `workshopCode` varchar(50) DEFAULT NULL COMMENT '车间编码',
  `deviceCode` varchar(50) NOT NULL COMMENT '设备编码',
  `tagCode` varchar(50) NOT NULL COMMENT '点位编码',
  `tagName` varchar(50) DEFAULT NULL COMMENT '点位名称',
  `tagValue` varchar(50) NOT NULL COMMENT '点位值',
  `updateTime` datetime NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`deviceCode`,`tagCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

表有两个主键:`deviceCode`和`tagCode`

2、Ruoyi-Admin之html文件修改

html 复制代码
        $(function() {
            var options = {
                url: prefix + "/list",
                createUrl: prefix + "/add",
                updateUrl: prefix + "/edit/{id}",
                removeUrl: prefix + "/remove/{id}",
                exportUrl: prefix + "/export",
                modalName: "实时数据查询",
                columns: [{
                    checkbox: true
                },
                {
                    field: 'workshopCode',
                    title: '车间编码'
                },
                {
                    field: 'deviceCode',
                    title: '设备编码'
                },
                {
                    field: 'tagCode',
                    title: '点位编码'
                },
                {
                    field: 'tagName',
                    title: '点位名称'
                },
                {
                    field: 'tagValue',
                    title: '点位值'
                },
                {
                    field: 'updateTime',
                    title: '更新时间'
                },
                {
                    title: '操作',
                    align: 'center',
                    formatter: function(value, row, index) {
                        var param = row.deviceCode+"&tagCode="+row.tagCode;
                        var actions = [];
                        actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + param + '\')"><i class="fa fa-edit"></i>编辑</a> ');
                        actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + param + '\')"><i class="fa fa-remove"></i>删除</a>');
                        return actions.join('');
                    }
                }]
            };
            $.table.init(options);
        });

主要修改是操作部分,增加了param对参数进行拼接。

3、Ruoyi-Admin之Controller模块修改

java 复制代码
    /**
     * 修改实时数据查询
     */
    @RequiresPermissions("system:realtime:edit")
    @GetMapping("/edit/{deviceCode}&tagCode={tagCode}")
    public String edit(@PathVariable("deviceCode") String deviceCode, @PathVariable("tagCode") String tagCode, ModelMap mmap)
    {
        DeviceRealtime dr = new DeviceRealtime();
        dr.setDeviceCode(deviceCode);
        dr.setTagCode(tagCode);
        DeviceRealtime deviceRealtime = deviceRealtimeService.selectDeviceRealtimeByDeviceCode(dr);
        mmap.put("deviceRealtime", deviceRealtime);
        return prefix + "/edit";
    }

    /**
     * 删除实时数据查询
     */
    @RequiresPermissions("system:realtime:remove")
    @Log(title = "实时数据查询", businessType = BusinessType.DELETE)
    @PostMapping( "/remove/{deviceCode}&tagCode={tagCode}")
    @ResponseBody
    public AjaxResult remove(@PathVariable("deviceCode") String deviceCode, @PathVariable("tagCode") String tagCode)
    {
        DeviceRealtime deviceRealtime = new DeviceRealtime();
        deviceRealtime.setDeviceCode(deviceCode);
        deviceRealtime.setTagCode(tagCode);
        return toAjax(deviceRealtimeService.deleteDeviceRealtimeByDeviceCode(deviceRealtime));
    }

主要修改编辑和删除模块,PostMapping和函数参数部分需要一致,并于html中一致,用两个主键锁定唯一记录。查询和新增记录使用参数是对象,不需要特别处理。

如果涉及更多参数,也可以考虑直接将传入参数改为DeviceRealtime 对象。

4、ruoyi-system模块修改

4.1 服务接口IDeviceRealtimeService.java

java 复制代码
  /**
     * 修改实时数据查询
     * 
     * @param deviceRealtime 实时数据查询
     * @return 结果
     */
    public int updateDeviceRealtime(DeviceRealtime deviceRealtime);


    /**
     * 删除实时数据查询信息
     * 
     * @param deviceRealtime 实时数据查询
     * @return 结果
     */
    public int deleteDeviceRealtimeByDeviceCode(DeviceRealtime deviceRealtime);

4.2服务实现DeviceRealtimeServiceImpl.java

java 复制代码
    /**
     * 修改实时数据查询
     * 
     * @param deviceRealtime 实时数据查询
     * @return 结果
     */
    @Override
    public int updateDeviceRealtime(DeviceRealtime deviceRealtime)
    {
        deviceRealtime.setUpdateTime(DateUtils.getNowDate());
        return deviceRealtimeMapper.updateDeviceRealtime(deviceRealtime);
    }

    /**
     * 删除实时数据查询信息
     * 
     * @param deviceRealtime 实时数据查询
     * @return 结果
     */
    @Override
    public int deleteDeviceRealtimeByDeviceCode(DeviceRealtime deviceRealtime)
    {
        return deviceRealtimeMapper.deleteDeviceRealtimeByDeviceCode(deviceRealtime);
    }

4.3 Mapper文件DeviceRealtimeMapper.java修改

java 复制代码
   /**
     * 修改实时数据查询
     * 
     * @param deviceRealtime 实时数据查询
     * @return 结果
     */
    public int updateDeviceRealtime(DeviceRealtime deviceRealtime);

    /**
     * 删除实时数据查询
     * 
     * @param deviceCode 实时数据查询主键
     * @return 结果
     */
    public int deleteDeviceRealtimeByDeviceCode(DeviceRealtime deviceRealtime);

4.4 xml文件DeviceRealtimeMapper.xml修改

XML 复制代码
    <update id="updateDeviceRealtime" parameterType="DeviceRealtime">
        update edge.device_realtime
        <trim prefix="SET" suffixOverrides=",">
            <if test="workshopCode != null">workshopCode = #{workshopCode},</if>
            <if test="tagCode != null">tagCode = #{tagCode},</if>
            <if test="tagName != null">tagName = #{tagName},</if>
            <if test="tagValue != null and tagValue != ''">tagValue = #{tagValue},</if>
            <if test="updateTime != null">updateTime = #{updateTime},</if>
        </trim>
        where deviceCode = #{deviceCode} and tagCode = #{tagCode}
    </update>

    <delete id="deleteDeviceRealtimeByDeviceCode" parameterType="DeviceRealtime">
        delete from edge.device_realtime where deviceCode = #{deviceCode} and tagCode = #{tagCode}
    </delete>
相关推荐
驭渊的小故事2 小时前
MyBatis XML 开发实战:从配置到 CRUD 全解析
xml·java·mybatis
哦虎!7 小时前
【JavaEE】网络初识
java
for_ever_love__7 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
我是人✓8 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
欣栀♡8 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室9 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项9 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog9 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
秋饼9 小时前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发
摇滚侠9 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记