examples-gas.md 5.1 KB

CRUD 示例代码(tofly-gas 风格)

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

  • Controller 不写业务代码
  • SQL 只在 *Mapper.xml
  • 分层为 Controller -> Service -> Mapper
  • 返回统一结果对象(示例使用 ResultRespone

1) Controller 示例

package com.tofly.gas.demo.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tofly.common.result.ResultRespone;
import com.tofly.gas.demo.entity.GasStation;
import com.tofly.gas.demo.service.GasStationService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;

@RestController
@AllArgsConstructor
@RequestMapping("/gasStation")
public class GasStationController {

    private final GasStationService gasStationService;

    @GetMapping("/page")
    public ResultRespone page(Page<GasStation> page, @ModelAttribute GasStation query) {
        return ResultRespone.success(gasStationService.pageQuery(page, query));
    }

    @GetMapping("/{id}")
    public ResultRespone getById(@PathVariable Long id) {
        return ResultRespone.success(gasStationService.getById(id));
    }

    @PostMapping
    public ResultRespone save(@RequestBody GasStation entity) {
        return ResultRespone.success(gasStationService.create(entity));
    }

    @PutMapping
    public ResultRespone update(@RequestBody GasStation entity) {
        return ResultRespone.success(gasStationService.modify(entity));
    }

    @DeleteMapping("/{id}")
    public ResultRespone delete(@PathVariable Long id) {
        return ResultRespone.success(gasStationService.removeById(id));
    }

    @DeleteMapping("/deleteByIds")
    public ResultRespone deleteByIds(String ids) {
        return ResultRespone.success(gasStationService.removeByIds(Arrays.asList(ids.split(","))));
    }
}

2) Service / ServiceImpl 示例

package com.tofly.gas.demo.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tofly.gas.demo.entity.GasStation;

public interface GasStationService extends IService<GasStation> {
    Page<GasStation> pageQuery(Page<GasStation> page, GasStation query);
    GasStation create(GasStation entity);
    boolean modify(GasStation entity);
}
package com.tofly.gas.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.tofly.gas.demo.entity.GasStation;
import com.tofly.gas.demo.mapper.GasStationMapper;
import com.tofly.gas.demo.service.GasStationService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class GasStationServiceImpl extends ServiceImpl<GasStationMapper, GasStation> implements GasStationService {

    @Override
    public Page<GasStation> pageQuery(Page<GasStation> page, GasStation query) {
        return this.page(page, Wrappers.query(query));
    }

    @Override
    public GasStation create(GasStation entity) {
        this.save(entity);
        return entity;
    }

    @Override
    public boolean modify(GasStation entity) {
        return this.updateById(entity);
    }
}

3) Mapper 接口示例(仅声明,不写 SQL)

package com.tofly.gas.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tofly.gas.demo.entity.GasStation;
import org.apache.ibatis.annotations.Param;

public interface GasStationMapper extends BaseMapper<GasStation> {
    Page<GasStation> pageCustom(Page<GasStation> page, @Param("q") GasStation query);
}

4) GasStationMapper.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.tofly.gas.demo.mapper.GasStationMapper">

    <sql id="Base_Columns">
        id, station_code, station_name, status, create_time, update_time
    </sql>

    <resultMap id="GasStationResultMap" type="com.tofly.gas.demo.entity.GasStation">
        <id column="id" property="id"/>
        <result column="station_code" property="stationCode"/>
        <result column="station_name" property="stationName"/>
        <result column="status" property="status"/>
        <result column="create_time" property="createTime"/>
        <result column="update_time" property="updateTime"/>
    </resultMap>

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

</mapper>