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>