# CRUD 示例代码(符合 java-yx-skill 约束) 以下示例满足这些关键约束: - Controller 不写业务代码 - 查询不加自定义日志,新增/修改/删除加 `@ToFlyAppLog` - SQL 只在 `*Mapper.xml` - 统一返回 `ResultRespone` ## 1) Controller 示例 ```java package com.example.demo.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.common.ResultRespone; import com.example.common.log.annotation.ToFlyAppLog; import com.example.demo.entity.Device; import com.example.demo.service.DeviceService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.Arrays; @RestController @AllArgsConstructor @RequestMapping("/device") @Api(tags = "设备管理") public class DeviceController { private final DeviceService deviceService; @GetMapping("/page") @ApiOperation("分页查询") public ResultRespone page(Page page, @ModelAttribute Device query) { return ResultRespone.success(deviceService.pageQuery(page, query)); } @GetMapping("/{id}") @ApiOperation("按ID查询") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "主键ID", required = true, dataType = "Long") }) public ResultRespone getById(@PathVariable Long id) { return ResultRespone.success(deviceService.getById(id)); } @PostMapping @ToFlyAppLog(title = "设备管理-新增") @ApiOperation("新增设备") public ResultRespone save(@RequestBody Device device) { return ResultRespone.success(deviceService.create(device)); } @PutMapping @ToFlyAppLog(title = "设备管理-修改") @ApiOperation("修改设备") public ResultRespone update(@RequestBody Device device) { return ResultRespone.success(deviceService.modify(device)); } @DeleteMapping("/{id}") @ToFlyAppLog(title = "设备管理-删除") @ApiOperation("按ID删除") public ResultRespone delete(@PathVariable Long id) { return ResultRespone.success(deviceService.removeById(id)); } @DeleteMapping("/deleteByIds") @ToFlyAppLog(title = "设备管理-批量删除") @ApiOperation("按ID批量删除") public ResultRespone deleteByIds(String ids) { return ResultRespone.success(deviceService.removeByIds(Arrays.asList(ids.split(",")))); } } ``` ## 2) Service / ServiceImpl 示例 ```java package com.example.demo.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.example.demo.entity.Device; public interface DeviceService extends IService { Page pageQuery(Page page, Device query); Device create(Device device); boolean modify(Device device); } ``` ```java package com.example.demo.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.demo.entity.Device; import com.example.demo.mapper.DeviceMapper; import com.example.demo.service.DeviceService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class DeviceServiceImpl extends ServiceImpl implements DeviceService { @Override public Page pageQuery(Page page, Device query) { return this.page(page, Wrappers.query(query)); } @Override public Device create(Device device) { this.save(device); return device; } @Override public boolean modify(Device device) { return this.updateById(device); } } ``` ## 3) Mapper 接口示例(仅声明,不写 SQL) ```java package com.example.demo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.demo.entity.Device; import org.apache.ibatis.annotations.Param; public interface DeviceMapper extends BaseMapper { Page pageCustom(Page page, @Param("q") Device query); } ``` ## 4) DeviceMapper.xml 示例(SQL 只放这里) ```xml id, device_code, device_name, status, create_time, update_time ``` ## 5) 反例(不要这样写) ```java // 错误:在 Mapper 注解中写 SQL @Select("select * from t_device") List listAll(); ```