【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

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template