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

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


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

1、保存或更新属性名称

2、保存或更新属性值

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

4、根据ID删除属性名称

5、根据ID删除属性值

下面逐一是实现

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

@Tag(name = "房间属性管理")
@RestController
@RequestMapping("/admin/attr")
public class AttrController {

    @Autowired
    private AttrKeyService attrKeyService;

    @Autowired
    private 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里面不能进行联表查询,所以这边调用业务层方法自己写sql
        List<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{

    @Autowired
    private AttrKeyMapper attrKeyMapper;

    /**
     * 查询全部属性名称和属性值列表
     *
     * @return
     */
    @Override
    public 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_id
    from attr_key k
             left join attr_value v on k.id = v.attr_key_id and v.is_deleted = 0
    where k.is_deleted = 0
</select>
4、根据ID删除属性名称

查看接口

image-20240609205548736

从接口信息可以看出来:

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

进行开发

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

AttrController中增加如下内容

    @Operation(summary = "根据id删除属性名称")
    @DeleteMapping("key/deleteById")
    @Transactional
    public 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();
}
  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
回答: Spring Boot 是一个用于快速构建基于Spring框架的应用程序的开发框架。它提供了很多的Starter,用于自动配置第三方库。在Spring Boot中,我们可以使用@SpringBootApplication注解来代替@EnableAutoConfiguration和@ComponentScan注解。\[1\]如果你想在Spring Boot中使用Vue进行全栈开发,你可以按照以下步骤进行操作: 1. 创建一个Spring Boot项目,并在启动类中添加@SpringBootApplication注解。\[1\] 2. 导入Vue的相关依赖,可以使用Maven或者其他构建工具进行管理。\[2\] 3. 创建一个RestController类,使用@RestController注解来标识该类为一个控制器。在该类中,可以定义各种接口来处理前端的请求。\[3\] 4. 在接口方法中编写相应的业务逻辑,返回前端需要的数据。 5. 在前端部分,你可以使用Vue来构建用户界面,并通过发送HTTP请求来与后端进行通信。 通过以上步骤,你可以实现Spring BootVue的全栈开发。你可以根据具体的需求和业务逻辑来扩展和定制你的应用程序。 #### 引用[.reference_title] - *1* *3* [学习SpringBoot+Vue全栈开发实战](https://blog.csdn.net/qq_35849321/article/details/106079398)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [springboot+vue全栈开发](https://blog.csdn.net/qq_45811584/article/details/128666030)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小林学习编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值