【SpringBoot + Vue 尚庭公寓实战】基本属性接口实现(七)

【SpringBoot + Vue 尚庭公寓实战】基本属性接口实现(七)


文章目录

      • 【SpringBoot + Vue 尚庭公寓实战】基本属性接口实现(七)
        • 1、保存或更新属性名称
        • 2、保存或更新属性值
        • 3、查询全部属性名称和属性值列表
        • 4、根据ID删除属性名称
        • 5、根据ID删除属性值

房间基本属性管理共有五个接口,分别是

1、保存或更新属性名称

2、保存或更新属性值

3、查询全部属性名称和属性值列表

4、根据ID删除属性名称

5、根据ID删除属性值

下面逐一是实现

首先在AttrController中注入AttrKeyServiceAttrValueService,如下:

@Tag(name = "房间属性管理")
@RestController
@RequestMapping("/admin/attr")
public class AttrController {@Autowiredprivate AttrKeyService attrKeyService;@Autowiredprivate AttrValueService attrValueService;
}
1、保存或更新属性名称

查看接口

image-20240609202948861

从接口信息可以看出来:

  • POST请求,请求地址为/admin/attr/value/saveOrUpdate

  • 请求包含id、name、attrKeyId,是AttrValue对象

    @Schema(description = "房间基本属性表")
    @TableName(value = "attr_key")
    @Data
    public class AttrKey extends BaseEntity {private static final long serialVersionUID = 1L;@Schema(description = "属性key")@TableField(value = "name")private String name;}
    

进行代码开发

因为是单表查询,可以直接使用MyBatisPlus提供的方法实现。在AttrController中增加如下内容:

    @Operation(summary = "新增或更新属性值")@PostMapping("value/saveOrUpdate")public Result saveOrUpdateAttrValue(@RequestBody AttrValue attrValue) {attrValueService.saveOrUpdate(attrValue);return Result.ok();}
2、保存或更新属性值

查看接口

image-20240609203513281

从接口信息可以看出来:

  • POST请求,请求地址为/admin/attr/key/saveOrUpdate

  • 请求包含id、name,是AttrKey对象

    @Schema(description = "房间基本属性表")
    @TableName(value = "attr_key")
    @Data
    public class AttrKey extends BaseEntity {private static final long serialVersionUID = 1L;@Schema(description = "属性key")@TableField(value = "name")private String name;}
    

进行开发

同为单表,直接使用MyBatisPlus即可,在AttrController中增加如下内容:

@Operation(summary = "新增或更新属性名称")
@PostMapping("key/saveOrUpdate")
public Result saveOrUpdateAttrKey(@RequestBody AttrKey attrKey) {attrKeyService.saveOrUpdate(attrKey);return Result.ok();
}
3、查询全部属性名称和属性值列表

查看接口

image-20240609203828227

image-20240609203845982

从接口信息可以看出来:

  • Get请求,请求地址为/admin/attr/list

  • 不需要传任何参数,无请求体

  • 响应数据为AttrKeyVo对象

    //响应数据示例
    {"code": 0,"message": "","data": [{"id": 0,"name": "","attrValueList": [{"id": 0,"name": "","attrKeyId": 0}]}]
    }
    

    查看web-admin模块下的com.atguigu.lease.web.admin.vo.attr.AttrKeyVo,内容如下:

    @Data
    public class AttrKeyVo extends AttrKey {@Schema(description = "属性value列表")private List<AttrValue> attrValueList;
    }
    

进行开发

查询全部属性名称和属性值列表,包含了两个表,因为MyBatis-Plus本身不支持连表查询,所以需要采用自己手写sql的方式

1、首先在AttrController中添加如下内容

    @Operation(summary = "查询全部属性名称和属性值列表")@GetMapping("list")public Result<List<AttrKeyVo>> listAttrInfo() {//因为MyBatisPlus里面不能进行联表查询,所以这边调用业务层方法自己写sqlList<AttrKeyVo> attrKeyVos = attrKeyService.listAttrInfo();return Result.ok(attrKeyVos);}

2、编写Service层逻辑,在AttrKeyService创建接口

List<AttrKeyVo> listAttrInfo();

3、编写Service层实现类,在AttrKeyServiceImpl中调用Mapper层方法

/**
* @author liubo
* @description 针对表【attr_key(房间基本属性表)】的数据库操作Service实现
* @createDate 2023-07-24 15:48:00
*/
@Service
public class AttrKeyServiceImpl extends ServiceImpl<AttrKeyMapper, AttrKey>implements AttrKeyService{@Autowiredprivate AttrKeyMapper attrKeyMapper;/*** 查询全部属性名称和属性值列表** @return*/@Overridepublic List<AttrKeyVo> listAttrInfo() {List<AttrKeyVo> attrKeyVos =  attrKeyMapper.listAttrInfo();return attrKeyVos;}
}

4、编写Mapper层逻辑

AttrKeyMapper中增加如下内容

List<AttrKeyVo> listAttrInfo();

对应的在AttrKeyMapper.xml编写sql语句,具体思路如下

通过attrKey的id跟attrValue的attr_key_id进行匹配,需要注意的是,再进行关联时,我们需要进行左连接,同时在判断k.id = v.attr_key_id 需要再加上v.is_deleted = 0,where只做判断k.is_deleted = 0,因为用的是逻辑删除,这样避免k值存在,而v值不存在却查询出来,具体代码如下:

<resultMap id="BaseResultMap" type="com.atguigu.lease.web.admin.vo.attr.AttrKeyVo"><id property="id" column="id"/><result property="name" column="key_name"/><collection property="attrValueList" ofType="com.atguigu.lease.model.entity.AttrValue"><id column="value_id" property="id"/><result column="value_name" property="name"/><result column="key_id" property="attrKeyId"/></collection>
</resultMap>
<select id="listAttrInfo" resultMap="BaseResultMap">select k.id,k.name        key_name,v.id          value_id,v.name        value_name,v.attr_key_id key_idfrom attr_key kleft join attr_value v on k.id = v.attr_key_id and v.is_deleted = 0where k.is_deleted = 0
</select>
4、根据ID删除属性名称

查看接口

image-20240609205548736

从接口信息可以看出来:

  • DELETE请求,请求地址为/admin/attr/key/deleteById
  • 请求参数为attrKeyId

进行开发

删除属性名称时,需要去删除,对应的属性值,因为作为key不存在了,那么值,也没有存在的意义,所以可以通过``LambdaQueryWrapper`进行条件筛选,删除

AttrController中增加如下内容

    @Operation(summary = "根据id删除属性名称")@DeleteMapping("key/deleteById")@Transactionalpublic Result removeAttrKeyById(@RequestParam Long attrKeyId) {//删除属性名称attrKeyService.removeById(attrKeyId);//删除属性值LambdaQueryWrapper<AttrValue> attrValueLambdaQueryWrapper = new LambdaQueryWrapper<>();attrValueLambdaQueryWrapper.eq(AttrValue::getAttrKeyId,attrKeyId);attrValueService.remove(attrValueLambdaQueryWrapper);return Result.ok();}
5、根据ID删除属性值

AttrController中增加如下内容

@Operation(summary = "根据id删除属性值")
@DeleteMapping("value/deleteById")
public Result removeAttrValueById(@RequestParam Long id) {attrValueService.removeById(id);return Result.ok();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QSS 自定义QCheckBox

Qt Style Sheets are a powerful mechanism that allows you to customize the appearance of widgets . 简述 QCheckBox支持盒子模型。子控件::indicator可以定义指示器样式。默认情况下指示器在内容矩形框的左上角。属性spacing指定指示器和文本之间的间距。 效果 样式表 …

内网穿透的方式有哪些——快解析的优势

外网穿透内网技术&#xff0c;即内网映射&#xff0c;是把目标本地内网地址和端口发布到互联网&#xff0c;是一种由内网开放到外网的权限操作。那么&#xff0c;内网穿透的方法有哪些呢&#xff1f;做映射外网的方法。需要结合自己本地网络环境和应用场景来实施。这里分享三种…

OpenGauss数据库-5.数据更新

第1关&#xff1a;插入数据 gsql -d postgres -U gaussdb -W "passwd123123" create table student (id integer primary key,name char(20),age integer ); insert into student values(1,"lily",20),(2,lily,21),(3,marry,19); 第2关&#xff1a;删除数…

汇编:数组定义数据填充

数组的定义 在32位汇编语言中&#xff0c;定义数组时&#xff0c;通常使用定义数据指令&#xff08;如 DB, DW, DD,DQ &#xff09;和标签来指定数组的名称和内容。DB定义字节数组&#xff08;每个元素占1字节&#xff09;、DW定义字数组&#xff08;每个元素占2字节&#xff…

Java学习 - MyBatis - 初识MyBatis

前言 什么是持久化 持久化是将程序数据在持久状态和瞬时状态间转换的机制&#xff0c;将数据保存到可永久保存的存储设备中。最常见的就是将内存中的对象存储在数据库中&#xff0c;或者存在磁盘文件、XML 数据文件中等等。其中&#xff0c;文件 IO 属于持久化机制&#xff0…

【实战JVM】-实战篇-06-GC调优

文章目录 1 GC调优概述1.1 调优指标1.1.1 吞吐量1.1.2 延迟1.1.3 内存使用量 2 GC调优方法2.1 发现问题2.1.1 jstat工具2.1.2 visualvm插件2.1.3 PrometheusGrafana2.1.4 GC Viewer2.1.5 GCeasy 2.2 常见GC模式2.2.1 正常情况2.2.2 缓存对象过多2.2.3 内存泄漏2.2.4 持续FullGC…

SpringBoot个人网盘系统-计算机毕业设计源码92922

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势或改善自身的缺点&#xff0c;互联网的发展文件管理带来了福音。个人网盘系统是以实际运用为开发背景&#xff0c;运用软件工程原理和…

⌈ 传知代码 ⌋ 【CLIP】文本也能和图像配对

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

Github 2024-06-10 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目2Go项目2PHP项目1Blade项目1TypeScript项目1Lua项目1Dart项目1Swift项目1Cuda项目1Python项目1MDX项目1Ventoy: 100%开源的可启动USB解决方…

超越出身与学府:揭秘成功者共有的七大特质

在当今多元化的世界里&#xff0c;个人成功的故事如同繁星点点&#xff0c;照亮了无数追梦者的前行之路。新东方创始人俞敏洪先生曾深刻地指出&#xff0c;真正的成功并不取决于家庭背景的显赫与否&#xff0c;也不在于就读大学的名气大小&#xff0c;而是深深植根于个人内在的…

VMware Workstation虚拟机固定IP配置(主机互通、外网可访问)

VMware Workstation虚拟机固定IP配置 环境问题配置过程配置虚拟机网络适配器配置虚拟机网络配置虚拟网卡网络适配器配置虚拟机固定IP 结果验证结束语参考 环境 主机&#xff1a;Windows 11 VMware Workstation: 17.5.2 虚拟机&#xff1a;Ubuntu 24.02 LTS 注&#xff1a; 主…

DeepSpeed Huggingface模型的自动Tensor并行

推理阶段。在后台&#xff0c;1. DeepSpeed会把运行高性能kernel(kernel injection)&#xff0c;加快推理速度&#xff0c;这些对用户是透明的&#xff1b; 2. DeepSpeed会根据mp_size来将模型放置在多个GPU卡上&#xff0c;自动模型并行&#xff1b; import os import torch …

【数据结构】前缀树(字典树)汇总

基础 {“a”,“abc”,“bac”,“bbc”,“ca” }的字典树如下图&#xff1a; 最主用的应用&#xff1a;一&#xff0c;字符串编码。二&#xff0c;位运算。 字符串编码 相比利用哈希映射编码&#xff0c;优点如下&#xff1a; 依次查询长度为n的字符串s的前缀时间复杂度是O(…

iCloud完全指南:释放Apple云服务的终极潜力

iCloud是苹果公司提供的云服务&#xff0c;它允许用户存储和同步照片、文档、音乐、应用数据以及更多类型的文件。通过有效利用iCloud&#xff0c;用户可以在不同设备间无缝地访问和编辑内容。本文旨在全面介绍如何高效使用iCloud&#xff0c;确保您能够最大化这一服务的价值。…

⌈ 传知代码 ⌋ 多模态COGMEN详解

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

【Vue】智慧商城

步骤一般都是&#xff1a; 静态结构 > 封装接口 > 路由获取参数 > 获取数据 动态渲染 先封装接口再路由获取参数的原因是因为&#xff0c;只有先封装好了接口&#xff0c;才能知道我们需要哪些参数 接口文档&#xff1a;https://apifox.com/apidoc/shared-12ab6b18-a…

Java——IO流(一)-(2/9):File类的常用方法(判断文件类型、获取文件信息、创建删除文件、遍历文件夹)

目录 常用方法1&#xff1a;判断文件类型、获取文件信息 方法 实例演示 常用方法2&#xff1a;创建文件、删除文件 方法 实例演示 常用方法3&#xff1a;遍历文件夹 方法 实例演示 常用方法1&#xff1a;判断文件类型、获取文件信息 方法 File提供的判断文件类型、获…

【C#线程设计】3:threadpool

实现&#xff1a; &#xff08;1&#xff09;.控件&#xff1a;group Box&#xff0c;text Box&#xff0c;check Box&#xff0c;label&#xff0c;botton&#xff0c;richtextbox 控件拉取见&#xff1a;https://blog.csdn.net/m0_74749240/article/details/139409510?spm1…

插卡式仪器模块:数据记录模块(插卡式)

• 32 位分辨率 • 250 KSPS 采样率 • 可以同时并且连续地记录两个通道的电压输入 • 实时上传原始数据至 PC 端 通道22输入阻抗电压22 kΩ10 MΩ电流0.2 Ω输入范围电压 250 mV 4.5 V电流1.5 A耦合DCDC带宽450 Hz385 HzADC 分辨率32 Bits24 Bits采样率10 kSPS250 kSPS测量…

kafka集成SpringBoot api编写教程

1.新建项目 用的idea是20222.1.3版本&#xff0c;没有Spring Initializr 插件&#xff0c;不能直接创建springboot项目 可以在以下网址创建项目&#xff0c;下载后解压&#xff0c;然后用idea打开项目即可 1.1 在 https://start.spring.io/ 上创建项目 1.2上传到linux&#x…