本文共 8100 字,大约阅读时间需要 27 分钟。
在idea中使用Easy Code插件配合mybatis-plus 快速生成基于SpringBoot 的 restful API,提高工作效率。
自动生成的代码都是基于单表操作的。
Easy Code 地址:gitee.com/makejava/Ea…
新建数据库
新建一张表,建议字段使用下划线的命名方式。
主键建议使用id,也可以不用。模板中会根据主键是否命名为id来添加@TableId(type = IdType.AUTO),如果命名为其他的,需要自己添加该注解
CREATE TABLE `dog` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(30) NOT NULL COMMENT '名称', `age` int NOT NULL COMMENT '年龄', `del_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除标志,0=未删除,1=删除', PRIMARY KEY (`id`) USING BTREE) ENGINE=InnoDB COMMENT='狗';
新建SpringBoot项目
核心依赖如下:
com.baomidou mybatis-plus-boot-starter 3.3.2 org.projectlombok lombok
如果插件市场找不到,去插件仓库:plugins.jetbrains.com/,下载后从硬盘上安装。具体教程百度,网上很多。
修改模板的时候,不建议直接修改默认的模板,建议直接复制一份再修改。
模板名称建议带上后缀,会有高亮提示,具体模板见文末。
连接成功后找到要生成代码的表,可以先看下配置,有没有字段类型映射错误的,如果有可以手动配置一下。
这里是单表的配置,也可以配置全局的。
没问题后就可以点击生成按钮了
![image-20200911094114817](https://img-blog.csdnimg.cn/2020091720404871.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTk4MzIx,size_16,color_FFFFFF,t_70#pic_center生成后在idea目录下会生成该表的配置信息,后续如果生成的代码有问题,可以把生成的这个配置文件删除然后重新生成代码。
注意:生成的Mapper.xml要修改一下,删除一个“,”
image-20200911094828656
生成后可以测试一下接口,看一下效果,可以根据自己的业务需求自行调整。其他进阶玩法可以参考官方文档。
entity.java
##导入宏定义$!define##保存文件(宏定义)#save("/entity", ".java")##包路径(宏定义)#setPackageSuffix("entity")##自动导入包(全局变量)$!autoImportimport com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import java.io.Serializable;import java.util.Date;##表注释(宏定义)#tableComment("表实体类")@Data@Builder@AllArgsConstructor@NoArgsConstructor@ApiModel("$!{tableInfo.comment}")public class $!{tableInfo.name} implements Serializable {private static final long serialVersionUID = $!tool.serial();#foreach($column in $tableInfo.fullColumn) #if(${column.comment})/** * ${column.comment} */#end #if(${column.comment})@ApiModelProperty(value = "${column.comment}")#end #if($column.name.equals('id'))@TableId(type = IdType.AUTO)#end private $!{tool.getClsNameByFullName($column.type)} $!{column.name}; #end}
mapper.java
##导入宏定义$!define##设置表后缀(宏定义)#setTableSuffix("Mapper")##保存文件(宏定义)#save("/mapper", "Mapper.java")##包路径(宏定义)#setPackageSuffix("mapper")import com.baomidou.mybatisplus.core.mapper.BaseMapper;import $!{tableInfo.savePackageName}.entity.$!tableInfo.name;##表注释(宏定义)#tableComment("表数据库访问层")public interface $!{tableName} extends BaseMapper<$!tableInfo.name> {}
service.java
##导入宏定义$!define##设置表后缀(宏定义)#setTableSuffix("Service")##保存文件(宏定义)#save("/service", "Service.java")##包路径(宏定义)#setPackageSuffix("service")import com.baomidou.mybatisplus.extension.service.IService;import $!{tableInfo.savePackageName}.entity.$!tableInfo.name;##表注释(宏定义)#tableComment("表服务接口")public interface $!{tableName} extends IService<$!tableInfo.name> {}
serviceImpl.java
##导入宏定义$!define##设置表后缀(宏定义)#setTableSuffix("ServiceImpl")##保存文件(宏定义)#save("/service/impl", "ServiceImpl.java")##包路径(宏定义)#setPackageSuffix("service.impl")import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};import $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Service;##表注释(宏定义)#tableComment("表服务实现类")@Slf4j@Servicepublic class $!{tableName} extends ServiceImpl<$!{tableInfo.name}Mapper, $!{tableInfo.name}> implements $!{tableInfo.name}Service {}
controller.java
##导入宏定义$!define##设置表后缀(宏定义)#setTableSuffix("Controller")##保存文件(宏定义)#save("/controller", "Controller.java")##包路径(宏定义)#setPackageSuffix("controller")##定义服务名#set($serviceName = $!tool.append($!tool.firstLowerCase($!tableInfo.name), "Service"))##定义实体对象名#set($entityName = $!tool.firstLowerCase($!tableInfo.name))import $!{tableInfo.savePackageName}.entity.$!tableInfo.name;import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;import io.swagger.annotations.ApiOperation;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.core.metadata.IPage;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.baomidou.mybatisplus.extension.api.R;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.io.Serializable;import java.util.List;##表注释(宏定义)#tableComment("表控制层[不建议修改,如果有新增的方法,写在子类中]")public class $!{tableName} { /** * 服务对象 */ @Autowired $!{tableInfo.name}Service $!{serviceName}; /** * 分页查询所有数据 * * @param page 分页对象 * @param $!entityName 查询实体 * @return 所有数据 */ @ApiOperation("分页查询所有数据") @GetMapping public R<$!tableInfo.name>> selectAll(Page<$!tableInfo.name> page, $!tableInfo.name $!entityName) { return R.ok ($!{serviceName}.page(page, new QueryWrapper<>($!entityName))); } /** * 通过主键查询单条数据 * * @param id 主键 * @return 单条数据 */ @ApiOperation("通过主键查询单条数据") @GetMapping("{id}") public R<$!tableInfo.name> selectOne(@PathVariable Serializable id) { return R.ok($!{serviceName}.getById(id)); } /** * 新增数据 * * @param $!entityName 实体对象 * @return 新增结果 */ @ApiOperation("新增数据") @PostMapping public R insert(@RequestBody $!tableInfo.name $!entityName) { boolean rs = $!{serviceName}.save($!entityName); return R.ok(rs?$!{entityName}.getId():0); } /** * 修改数据 * * @param $!entityName 实体对象 * @return 修改结果 */ @ApiOperation("修改数据") @PutMapping public R update(@RequestBody $!tableInfo.name $!entityName) { return R.ok($!{serviceName}.updateById($!entityName)); } /** * 单条/批量删除数据 * * @param idList 主键集合 * @return 删除结果 */ @ApiOperation("单条/批量删除数据") @DeleteMapping public R delete(@RequestParam("idList") List idList) { return R.ok($!{serviceName}.removeByIds(idList)); }}
extendController.java
##导入宏定义$!define##设置表后缀(宏定义)#setTableSuffix("ExtendController")##保存文件(宏定义)#save("/controller", "ExtendController.java")##包路径(宏定义)#setPackageSuffix("controller")##定义服务名#set($serviceName = $!tool.append($!tool.firstLowerCase($!tableInfo.name), "Service"))##定义实体对象名#set($entityName = $!tool.firstLowerCase($!tableInfo.name))import $!{tableInfo.savePackageName}.pojo.$!tableInfo.name;import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.core.metadata.IPage;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.baomidou.mybatisplus.extension.api.R;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import lombok.extern.slf4j.Slf4j;import io.swagger.annotations.Api;import java.io.Serializable;import java.util.List;##表注释(宏定义)#tableComment("表控制层扩展类,一般初次生成,后续不再覆盖。这个类提供编写自己定义的方法。")@Api(tags = "$!{tableInfo.comment}接口")@Slf4j@RestController@RequestMapping("$!tool.firstLowerCase($!tableInfo.name)")public class $!{tableName} extends $!{tableInfo.name}Controller {}复制代码mapper.xml##引入mybatis支持$!mybatisSupport##设置保存名称与保存位置$!callback.setFileName($tool.append($!{tableInfo.name}, "Mapper.xml"))$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper"))##拿到主键#if(!$tableInfo.pkColumn.isEmpty()) #set($pk = $tableInfo.pkColumn.get(0))#end#foreach($column in $tableInfo.fullColumn) $!column.obj.name,#end #foreach($column in $tableInfo.fullColumn) #end
针对以上的技术点呢,笔者也整理了一套视频学习资料和面试题,
需要的朋友可以帮忙转发一下
然后点击,即可免费领取!
以下是部分学习资料截图
转载地址:http://vkqub.baihongyu.com/