examples-yx.md 5.7 KB

CRUD 示例代码(符合 java-yx-skill 约束)

以下示例满足这些关键约束:

  • Controller 不写业务代码
  • 查询不加自定义日志,新增/修改/删除加 @ToFlyAppLog
  • SQL 只在 *Mapper.xml
  • 统一返回 ResultRespone

1) Controller 示例

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<Device> 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 示例

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<Device> {
    Page<Device> pageQuery(Page<Device> page, Device query);
    Device create(Device device);
    boolean modify(Device device);
}
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<DeviceMapper, Device> implements DeviceService {

    @Override
    public Page<Device> pageQuery(Page<Device> 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)

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<Device> {
    Page<Device> pageCustom(Page<Device> page, @Param("q") Device query);
}

4) DeviceMapper.xml 示例(SQL 只放这里)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.DeviceMapper">

    <sql id="Base_Columns">
        id, device_code, device_name, status, create_time, update_time
    </sql>

    <resultMap id="DeviceResultMap" type="com.example.demo.entity.Device">
        <id column="id" property="id"/>
        <result column="device_code" property="deviceCode"/>
        <result column="device_name" property="deviceName"/>
        <result column="status" property="status"/>
        <result column="create_time" property="createTime"/>
        <result column="update_time" property="updateTime"/>
    </resultMap>

    <select id="pageCustom" resultMap="DeviceResultMap">
        SELECT <include refid="Base_Columns"/>
        FROM t_device
        <where>
            <if test="q != null and q.deviceName != null and q.deviceName != ''">
                AND device_name LIKE CONCAT('%', #{q.deviceName}, '%')
            </if>
            <if test="q != null and q.status != null">
                AND status = #{q.status}
            </if>
        </where>
        ORDER BY update_time DESC
    </select>

</mapper>

5) 反例(不要这样写)

// 错误:在 Mapper 注解中写 SQL
@Select("select * from t_device")
List<Device> listAll();