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

本文主要是介绍【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();
}

这篇关于【SpringBoot + Vue 尚庭公寓实战】基本属性接口实现(七)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050260

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus