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

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.lqws.cn/news/142813.html

相关文章:

  • 仓库拉下ssm项目配置启动
  • 定时任务的 cron 表达式
  • A*算法实现原理以及实现步骤(C++)
  • kubernetes jenkins pipeline优化拉取大仓库性能指定分支+深度
  • 将 WTL 向导集成到 Visual Studio 2022 的完整教程
  • OpenCV CUDA模块图像处理-----对图像执行 均值漂移过程(Mean Shift Procedure)函数meanShiftProc()
  • PlayWright | 初识微软出品的 WEB 应用自动化测试框架
  • elasticsearch-8.17.4
  • 【JS进阶】ES6 实现继承的方式
  • 探秘半导体制造设备钢结构防震基座的承重奥秘-江苏泊苏系统集成有限公司
  • 基于BI PaaS架构的衡石HENGSHI SENSE平台技术解析:重塑企业级数据分析基座
  • 「数据分析 - NumPy 函数与方法全集」【数据分析全栈攻略:爬虫+处理+可视化+报告】
  • C语言| 指针引用数组元素
  • C++定长内存块的实现
  • 在Docker里面运行Docker
  • 鸿蒙Next开发真机调试签名申请流程
  • Vue3 通用框架结构
  • 在 CentOS 上安装 Docker 和 Docker Compose 并配置使用国内镜像源
  • html - <mark>标签
  • 基于Docker Compose部署Java微服务项目
  • docker快速部署OS web中间件 数据库 编程应用
  • ES6中的Map与Set数据结构的简单应用
  • Python html 库用法详解
  • 【Spark征服之路-2.2-安装部署Spark(二)】
  • ajax学习手册
  • 会计 - 金融负债和权益工具
  • 腾讯云V3签名
  • Zookeeper 和 Kafka 版本与 JDK 要求
  • 从二叉树到 STL:揭开 set 容器的本质与用法
  • CIFAR10的使用