依照下方提示依次创建entity、mapper、service、service实现类、controller,创建后的目录结构应当如下图所示:
创建entity
package com.ustcinfo.eip.todo.entity;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import com.ustcinfo.ishare.eip.admin.common.validator.group.AddGroup;import com.ustcinfo.ishare.eip.admin.common.validator.group.UpdateGroup;import io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;import lombok.Data;import javax.validation.constraints.NotBlank;/*** 待办事项实体** @author liuchengbiao* @date 2019/4/25 下午3:25*/@Data@ApiModel@TableName("todo")public class TodoEntity {@TableId@ApiModelProperty(notes = "待办事项ID")private Long id;@ApiModelProperty(notes = "待办事项名称")@NotBlank(message = "待办事项不能为空", groups = {AddGroup.class, UpdateGroup.class})private String name;@ApiModelProperty(notes = "待办事项状态")private Integer status;}
- 这里使用了 lombok 的 @Data注解,会自动生成xxxGetter、xxxSetter、toString等方法
- 这里使用了swagger注解 @ApiModel 以及 @ApiModelProperty 用于生成接口文档时参数的说明
- @TableName注解规定了该实体对应的表名
- 如果指定主键,只需要在主键属性上添加 @TableId 注解即可
该实体在生成的接口文档中的描述
创建mapper
package com.ustcinfo.eip.todo.mapper;import com.ustcinfo.eip.todo.entity.TodoEntity;import com.ustcinfo.ishare.eip.admin.starter.mybatis.mapper.AdminBaseMapper;import org.apache.ibatis.annotations.Mapper;/*** @author liuchengbiao* @date 2019/4/25 下午3:29*/@Mapperpublic interface TodoMapper extends AdminBaseMapper<TodoEntity> {}
只需要集成 AdminBaseMapper 并指明对应的泛型实体类即可,其他代码都不需要编写,就这么简单
创建service
package com.ustcinfo.eip.todo.service;import com.baomidou.mybatisplus.extension.service.IService;import com.ustcinfo.eip.todo.entity.TodoEntity;import com.ustcinfo.ishare.eip.admin.common.utils.MapUtils;import com.ustcinfo.ishare.eip.admin.starter.mybatis.page.PageUtils;/*** @author liuchengbiao* @date 2019/4/25 下午3:32*/public interface TodoService extends IService<TodoEntity> {/*** 分页查询** @param params* @return*/PageUtils<TodoEntity> queryPage(MapUtils params);}
只需要继承 IService 接口并指明对应的泛型实体即可,如果有其他特殊的需求需要添加方法的话,还可以在这里定义抽象方法(这里以分页为例,其他CURD都可以不用写的)。
创建service实现类
package com.ustcinfo.eip.todo.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.core.metadata.IPage;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.ustcinfo.eip.todo.entity.TodoEntity;import com.ustcinfo.eip.todo.mapper.TodoMapper;import com.ustcinfo.eip.todo.service.TodoService;import com.ustcinfo.ishare.eip.admin.common.utils.MapUtils;import com.ustcinfo.ishare.eip.admin.starter.mybatis.page.PageUtils;import com.ustcinfo.ishare.eip.admin.starter.mybatis.page.Query;import com.ustcinfo.ishare.eip.admin.starter.mybatis.utils.QueryWrapperUtils;import org.springframework.stereotype.Service;/*** @author liuchengbiao* @date 2019/4/25 下午3:33*/@Service("todoService")public class TodoServiceImpl extends ServiceImpl<TodoMapper, TodoEntity> implements TodoService {@Overridepublic PageUtils<TodoEntity> queryPage(MapUtils params) {String searchKey = params.getString("searchKey");// 模糊查询QueryWrapper<TodoEntity> queryWrapper = QueryWrapperUtils.wrapperLike(new QueryWrapper<TodoEntity>(), searchKey, "name");// 安装类型查询Integer status = params.getInteger("status");queryWrapper.eq(status != null, "status", status);// 排序queryWrapper.orderByDesc("id");IPage<TodoEntity> page = this.page(new Query<TodoEntity>(params).getPage(), queryWrapper);return new PageUtils(page);}}
- 实现接口 TodoService 并实现其抽象方法即可
- 主要类上的 @Service注解不可少
- 需要指明对应的实体以及实体对应的mapper
创建controller
package com.ustcinfo.eip.todo.controller;import com.google.common.collect.Lists;import com.ustcinfo.eip.todo.entity.TodoEntity;import com.ustcinfo.eip.todo.service.TodoService;import com.ustcinfo.ishare.eip.admin.common.utils.MapUtils;import com.ustcinfo.ishare.eip.admin.controller.AbstractController;import com.ustcinfo.ishare.eip.admin.service.sys.annotation.SysLog;import com.ustcinfo.ishare.eip.admin.common.form.JsonResult;import com.ustcinfo.ishare.eip.admin.starter.mybatis.page.PageUtils;import com.ustcinfo.ishare.eip.admin.common.validator.ValidatorUtils;import io.swagger.annotations.*;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.MediaType;import org.springframework.web.bind.annotation.*;import springfox.documentation.annotations.ApiIgnore;import java.util.Map;/*** 待办事项的接口** @author liuchengbiao* @date 2019/4/25 下午3:35*/@RestController@RequestMapping("/todo")@Api(tags = "待办事项")public class TodoController extends AbstractController {@Autowiredprivate TodoService todoService;@GetMapping("/list")@ApiOperation(value = "列表", notes = "分页待办功能列表", produces = MediaType.APPLICATION_JSON_VALUE)@ApiImplicitParams({@ApiImplicitParam(name = "page", value = "页码", paramType = "query", required = true, dataType = "int"),@ApiImplicitParam(name = "limit", value = "每页条数", paramType = "query", required = true, dataType = "int"),@ApiImplicitParam(name = "sidx", value = "排序字段", paramType = "query", dataType = "string"),@ApiImplicitParam(name = "order", value = "排序方式,如:asc、desc", paramType = "query", dataType = "string"),@ApiImplicitParam(name = "status", value = "状态", paramType = "query", dataType = "int"),@ApiImplicitParam(name = "searchKey", value = "查询条件", paramType = "query", dataType = "string")})public JsonResult<PageUtils<TodoEntity>> list(@ApiIgnore @RequestParam Map<String, Object> params) {PageUtils<TodoEntity> page = todoService.queryPage(MapUtils.getInstance(params));return JsonResult.ok().put(page);}@SysLog("添加待办事项")@PostMapping("/save")@ApiOperation(value = "添加", notes = "添加待办事项", produces = MediaType.APPLICATION_JSON_VALUE)public JsonResult<Void> save(@ApiParam(name = "添加的待办事项对象", value = "传入json格式", required = true) @RequestBody TodoEntity todo) {ValidatorUtils.validateEntity(todo);todoService.save(todo);return JsonResult.ok();}@SysLog("修改待办事项")@PostMapping("/update")@ApiOperation(value = "修改", notes = "修改待办事项", produces = MediaType.APPLICATION_JSON_VALUE)public JsonResult<Void> update(@ApiParam(name = "修改的待办事项对象", value = "传入json格式", required = true) @RequestBody TodoEntity todo) {ValidatorUtils.validateEntity(todo);todoService.updateById(todo);return JsonResult.ok();}@GetMapping("/info/{id}")@ApiOperation(value = "详情", notes = "获取指定ID的详细信息", produces = MediaType.APPLICATION_JSON_VALUE)public JsonResult<TodoEntity> info(@PathVariable("id") Long id) {TodoEntity todo = todoService.getById(id);return JsonResult.ok().put(todo);}@SysLog("删除待办事项")@PostMapping("/delete")@ApiOperation(value = "删除", notes = "删除待办事项", produces = MediaType.APPLICATION_JSON_VALUE)public JsonResult<Void> delete(@RequestBody Long[] ids) {todoService.removeByIds(Lists.newArrayList(ids));return JsonResult.ok();}@SysLog("改变状态")@PostMapping("/toggle/{id}")@ApiOperation(value = "改变状态", notes = "改变状态", produces = MediaType.APPLICATION_JSON_VALUE)public JsonResult<Void> toggle(@PathVariable(name = "id") Long id) {TodoEntity todo = todoService.getById(id);if (todo != null) {todo.setStatus(todo.getStatus() * -1);todoService.updateById(todo);}return JsonResult.ok();}}
- 在类上添加 @RestController 相当于 @Controller 和 @ResponseBody 注解合体
- 在类上使用swagger 的@Api注解用来标识生成的文档中的左侧接口描述
- 在方法上使用@SysLog注解用来记录操作的日志,括号中填写操作的名称
- 在方法上使用@PostMapping 表示仅接受post请求,括号中是请求的部分URI
- 在方法上使用 swagger 的 @ApiOperation 注解用来表示该方法的作用以及传参类型
- 在方法上使用 swagger 的 @ApiImplicitParams 注解用来标识该方法的入参信息,包括入参名称、类型、必填项、默认值等
- 基础框架controller中方法的返回值是 JsonResult ,他接受一个返回数据的泛型,前端会收到他的json数据
