【SpringBoot + Vue 尚庭公寓实战】房间支付方式管理接口实现(三)

【SpringBoot + Vue 尚庭公寓实战】房间支付方式管理接口实现(三)


文章目录

房间支付方式管理共有三个接口,分别是:

查询全部支付方式列表

保存或更新支付方式

根据ID删除支付方式

首先在PaymentTypeController中注入PaymentTypeService依赖,如下

java 复制代码
@Tag(name = "支付方式管理")
@RequestMapping("/admin/payment")
@RestController
public class PaymentTypeController {

    @Autowired
    private PaymentTypeService service;
}
1、查询全部支付方式列表

查看接口,运行项目后,访问localhost:8080/doc.html

点击支付方式管理

再点击查询全部支付方式列表接口

java 复制代码
//响应实例
{
	"code": 0,
	"message": "",
	"data": [
		{
			"id": 0,
			"name": "",
			"payMonthCount": "",
			"additionalInfo": ""
		}
	]
}

进行开发

1、在com/atguigu/lease/web/admin/controller/apartment/PaymentTypeController.java创建listPaymentType()方法

java 复制代码
@Operation(summary = "查询全部支付方式列表")
@GetMapping("list")
public Result<List<PaymentType>> listPaymentType() {
    List<PaymentType> list = service.list();
    return Result.ok(list);
}

2、查看service层

java 复制代码
/**
* @author liubo
* @description 针对表【payment_type(支付方式表)】的数据库操作Service
* @createDate 2023-07-24 15:48:00
*/
public interface PaymentTypeService extends IService<PaymentType> {

}

3、查看service实现类

java 复制代码
/**
* @author liubo
* @description 针对表【payment_type(支付方式表)】的数据库操作Service实现
* @createDate 2023-07-24 15:48:00
*/
@Service
public class PaymentTypeServiceImpl extends ServiceImpl<PaymentTypeMapper, PaymentType>
    implements PaymentTypeService{

}

4、查看Mapper

java 复制代码
/**
 * @author liubo
 * @description 针对表【payment_type(支付方式表)】的数据库操作Mapper
 * @createDate 2023-07-24 15:48:00
 * @Entity com.atguigu.lease.model.PaymentType
 */
public interface PaymentTypeMapper extends BaseMapper<PaymentType> {

}

因为使用的是mybatisplus,这意味着它将拥有BaseMapper接口中定义的所有通用CRUD方法,这些方法可以直接用于对PaymentType实体对应的数据库表进行操作,service层也同理。

知识点:

  • 逻辑删除功能

    由于数据库中所有表均采用逻辑删除策略,所以查询数据时均需要增加过滤条件is_deleted=0。

    上述操作虽不难实现,但是每个查询接口都要考虑到,也显得有些繁琐。为简化上述操作,可以使用Mybatis-Plus提供的逻辑删除功能,它可以自动为查询操作增加is_deleted=0过滤条件,并将删除操作转为更新语句。具体配置如下,详细信息可参考官方文档。

    • 步骤一:在application.yml中增加如下内容

      yml 复制代码
      mybatis-plus:
        global-config:
          db-config:
            logic-delete-field: flag # 全局逻辑删除的实体字段名(配置后可以忽略不配置步骤二)
            logic-delete-value: 1 # 逻辑已删除值(默认为 1)
            logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
    • 步骤二:在实体类中的删除标识字段上增加@TableLogic注解

      java 复制代码
      @Data
      public class BaseEntity {
      
          @Schema(description = "主键")
          @TableId(value = "id", type = IdType.AUTO)
          private Long id;
      
          @Schema(description = "创建时间")
          @JsonIgnore
          private Date createTime;
      
          @Schema(description = "更新时间")
          @JsonIgnore
          private Date updateTime;
      
          @Schema(description = "逻辑删除")
          @JsonIgnore
          @TableLogic
          @TableField("is_deleted")
          private Byte isDeleted;
      
      }

      注意:

      逻辑删除功能只对Mybatis-Plus自动注入的sql起效,也就是说,对于手动在Mapper.xml文件配置的sql不会生效,需要单独考虑。

2、保存或更新支付方式

查看接口,运行项目后,访问localhost:8080/doc.html

点击支付方式管理

再点击保存或更新支付方式

json 复制代码
//请求示例
{
  "id": 0,
  "name": "",
  "payMonthCount": "",
  "additionalInfo": ""
}
json 复制代码
//响应示例
{
	"code": 0,
	"message": "",
	"data": {}
}

进行开发

在PaymentTypeController中增加如下内容

java 复制代码
@Operation(summary = "保存或更新支付方式")
@PostMapping("saveOrUpdate")
public Result saveOrUpdatePaymentType(@RequestBody PaymentType paymentType) {
    service.saveOrUpdate(paymentType);
    return Result.ok();
}

知识点:

保存或更新数据时,前端通常不会传入isDeleted、createTime、updateTime这三个字段,因此我们需要手动赋值。但是数据库中几乎每张表都有上述字段,所以手动去赋值就显得有些繁琐。为简化上述操作,我们可采取以下措施。

  • is_deleted字段:可将数据库中该字段的默认值设置为0。

  • create_time和update_time:可使用mybatis-plus的自动填充功能,所谓自动填充,就是通过统一配置,在插入或更新数据时,自动为某些字段赋值,具体配置如下,详细信息可参考官方文档。

    • 为相关字段配置触发填充的时机,例如create_time需要在插入数据时填充,而update_time需要在更新数据时填充。具体配置如下,观察@TableField注解中的fill属性。

      java 复制代码
      @Data
      public class BaseEntity {
      
          @Schema(description = "主键")
          @TableId(value = "id", type = IdType.AUTO)
          private Long id;
      
          @Schema(description = "创建时间")
          @JsonIgnore
          @TableField(value = "create_time", fill = FieldFill.INSERT)
          private Date createTime;
      
          @Schema(description = "更新时间")
          @JsonIgnore
          @TableField(value = "update_time", fill = FieldFill.UPDATE)
          private Date updateTime;
      
          @Schema(description = "逻辑删除")
          @JsonIgnore
          @TableLogic
          @TableField("is_deleted")
          private Byte isDeleted;
      
      }
    • 配置自动填充的内容,具体配置如下

  • 在common模块 下创建com.atguigu.lease.common.mybatisplus.MybatisMetaObjectHandler类,内容如下:

    java 复制代码
    @Component
    public class MybatisMetaObjectHandler implements MetaObjectHandler {
        @Override
        public void insertFill(MetaObject metaObject) {
            this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
        }
    
        @Override
        public void updateFill(MetaObject metaObject) {
            this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
        }
    }

在做完上述配置后,当写入数据时,Mybatis-Plus会自动将实体对象的create_time字段填充为当前时间,当更新数据时,则会自动将实体对象的update_time字段填充为当前时间。

3、根据ID删除支付方式

查看接口,运行项目后,访问localhost:8080/doc.html

点击支付方式管理

再点击根据ID删除支付方式

json 复制代码
//响应示例
{
	"code": 0,
	"message": "",
	"data": {}
}

进行开发

在PaymentTypeController中增加如下方法

java 复制代码
@Operation(summary = "根据ID删除支付方式")
@DeleteMapping("deleteById")
public Result deletePaymentById(@RequestParam Long id) {
    service.removeById(id);
    return Result.ok();
}

知识点:

MybatisPlus逻辑删除功能的使用。

相关推荐
CoderYanger21 分钟前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc
Thneonl27 分钟前
Claude Code 频繁 Compacting?发布次日我根治了 2 个痛点
后端·rust
环境栈笔记2 小时前
指纹浏览器安卓怎么用?从运行位置到功能验收,先把三种方案分清
前端·人工智能·后端·自动化
小小张说故事2 小时前
Python 的 list 为什么能装下任何类型?拆开 PyObject* 数组,以及它让你多付了多少内存
后端·python
小蒜学长3 小时前
基于SpringBoot 框架的自媒体新闻系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·mysql数据库·自媒体新闻管理系统
Highcharts.js3 小时前
Highcharts 集成到 React 或 Vue 项目中时,如何高效地使用 TypeScript技巧?
vue.js·人工智能·react.js·typescript·前端框架·highcharts
IT_陈寒3 小时前
JavaScript实战技巧总结:深挖数组遍历的性能陷阱与实战解法
前端·人工智能·后端
余槐i3 小时前
PostgreSQL 加索引后查询反而更慢:优化器弃用索引的 3 种情形
spring boot·redis·mysql·postgresql·事务
Java后端的Ai之路12 小时前
CAS并发控制-从CPU指令到企业级乐观锁
vue.js·人工智能·python·cas·乐观锁
学长毕设13 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端