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

Ruoyi多主键表的增删改查

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

1、mysql数据库表定义

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文件修改

        $(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模块修改

/*** 修改实时数据查询*/@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}")@ResponseBodypublic 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

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

4.2服务实现DeviceRealtimeServiceImpl.java

    /*** 修改实时数据查询* * @param deviceRealtime 实时数据查询* @return 结果*/@Overridepublic int updateDeviceRealtime(DeviceRealtime deviceRealtime){deviceRealtime.setUpdateTime(DateUtils.getNowDate());return deviceRealtimeMapper.updateDeviceRealtime(deviceRealtime);}/*** 删除实时数据查询信息* * @param deviceRealtime 实时数据查询* @return 结果*/@Overridepublic int deleteDeviceRealtimeByDeviceCode(DeviceRealtime deviceRealtime){return deviceRealtimeMapper.deleteDeviceRealtimeByDeviceCode(deviceRealtime);}

4.3 Mapper文件DeviceRealtimeMapper.java修改

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

4.4 xml文件DeviceRealtimeMapper.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>

http://www.xdnf.cn/news/12158.html

相关文章:

  • LeetCode 热题 100 - 哈希 - 128
  • 解决神经网络输出尺寸过小的实战方案
  • React从基础入门到高级实战:React 实战项目 - 项目二:电商平台前端
  • [pdf、epub]300道《软件方法》强化自测题业务建模需求分析共257页(202505更新)
  • OpenResty 安装指南
  • 【JS进阶】ES5 实现继承的几种方式
  • k8s开发webhook使用certmanager生成证书
  • 记一次spark在docker本地启动报错
  • PX4 | 无人机关闭磁力计罗盘飞行(yaw estimate error报错解决方法)
  • vllm安装注意事项[nccl、cuda、python相关]
  • 七彩喜智慧养老平台:科技赋能下的市场蓝海,满足多样化养老服务需求
  • spring官方脚手架连接不上解决方案
  • 语雀文档保存失败URI malformed
  • v1.0.1版本更新·2025年5月22日发布-优雅草星云物联网AI智控系统
  • YAML在自动化测试中的三大核心作用
  • SSL/TLS握手全流程拆解:从“Hello“到“安全通道“的每一个字节
  • 高性能分布式消息队列系统(四)
  • Spring Boot 常用注解面试题深度解析
  • 重磅更新! 基于Gemini 2.5 Pro打造的AI智能体PlantUML-X上线!
  • Vue3入门指南:从零到精通的快速上手
  • CppCon 2015 学习:CLANG/C2 for Windows
  • c++的引用
  • 26考研 | 王道 | 计算机组成原理 | 三、存储系统
  • 数据质量是什么意思?怎样做好数据质量监控?
  • 【Flask】:轻量级Python Web框架详解
  • 解决ts报错找不到vue组件,Module “d:src/views/quota/logicpoolinfo/components/add
  • stm32_GPIO
  • 63、.NET 异常处理
  • Honor of Kings 2025.06.05
  • 如何自定义一个 Spring Boot Starter?