#mysql8+mybatis-plus3.1自动生成带lombok和swagger和增删改查接口

mybatis-dsc-generator

[图片上传失败...(image-835cad-1601049787821)]

还在为写swagger而烦恼吗?还在为忘记写注释而烦恼吗?还在为写简单的api接口而烦恼吗?mybatis-dsc-generator完美集成lombok,swagger的代码生成工具,让你不再为繁琐的注释和简单的接口实现而烦恼:entity集成,格式校验,swagger; dao自动加@ mapper,service自动注释和依赖; 控制器实现单表的增副改查,并实现swaggers的api文档。

源码地址

  • GitHub:https://github.com/flying-cattle/mybatis-dsc-generator
  • 码云:https://gitee.com/flying-cattle/mybatis-dsc-generator

MAVEN地址

2.1.0版本是未集成Mybatis-plus版本——源码分支master


    com.github.flying-cattle
    mybatis-dsc-generator
    2.1.0.RELEASE


3.0.0版本是集成了Mybatis-plus版本——源码分支mybatisPlus


    com.github.flying-cattle
    mybatis-dsc-generator
    3.0.0.RELEASE


数据表结构样式

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `login_name` varchar(40) DEFAULT NULL COMMENT '登录名',
  `password` varchar(100) NOT NULL COMMENT '秘密',
  `nickname` varchar(50) NOT NULL COMMENT '昵称',
  `type` int(10) unsigned DEFAULT NULL COMMENT '类型',
  `state` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '状态:-1失败,0等待,1成功',
  `note` varchar(255) DEFAULT NULL COMMENT '备注',
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `update_uid` bigint(20) DEFAULT '0' COMMENT '修改人用户ID',
  `login_ip` varchar(50) DEFAULT NULL COMMENT '登录IP地址',
  `login_addr` varchar(100) DEFAULT NULL COMMENT '登录地址',
  PRIMARY KEY (`id`),
  UNIQUE KEY `login_name` (`login_name`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

要求必须有表注释,要求必须有主键为id,所有字段必须有注释(便于生成java注释swagger等)。

生成的实体类

生成方法参考源码中的:https://gitee.com/flying-cattle/mybatis-dsc-generator/blob/master/src/main/java/com/github/mybatis/fl/test/TestMain.java

执行结果

实体类

/**
 * @filename:User CollectionRoute
 * @project wallet-sign  V1.0
 * Copyright(c) 2018 BianPeng Co. Ltd. 
 * All right reserved. 
 */
package com.emep.mall.admin.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;

/**   
 * Copyright: Copyright (c) 2019 
 * 
 * 

说明: 资金归集实体类

* @version: V1.0 * @author: BianPeng * * Modification History: * Date Author Version Description *---------------------------------------------------------------* * CollectionRoute BianPeng V1.0 initialize */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class User extends Model { private static final long serialVersionUID = 1601046735413L; @TableId(value = "id", type = IdType.AUTO) @ApiModelProperty(name = "id" , value = "ID") private Long id; @ApiModelProperty(name = "loginName" , value = "登录名") private String loginName; @ApiModelProperty(name = "password" , value = "秘密") private String password; @ApiModelProperty(name = "nickname" , value = "昵称") private String nickname; @ApiModelProperty(name = "type" , value = "类型") private Integer type; @ApiModelProperty(name = "state" , value = "状态:-1失败,0等待,1成功") private Integer state; @ApiModelProperty(name = "note" , value = "备注") private String note; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @ApiModelProperty(name = "createTime" , value = "创建时间") private Date createTime; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @ApiModelProperty(name = "updateTime" , value = "更新时间") private Date updateTime; @ApiModelProperty(name = "updateUid" , value = "修改人用户ID") private Long updateUid; @ApiModelProperty(name = "loginIp" , value = "登录IP地址") private String loginIp; @ApiModelProperty(name = "loginAddr" , value = "登录地址") private String loginAddr; @Override protected Serializable pkVal() { return this.id; } }
20.jpg

DAO

/**
 * @filename:UserDao CollectionRoute
 * @project wallet-sign  V1.0
 * Copyright(c) 2018 BianPeng Co. Ltd. 
 * All right reserved. 
 */
package com.emep.mall.admin.dao;

import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.emep.mall.admin.entity.User;

/**   
 * Copyright: Copyright (c) 2019 
 * 
 * 

说明: 资金归集数据访问层

* @version: V1.0 * @author: BianPeng * * Modification History: * Date Author Version Description *---------------------------------------------------------------* * CollectionRoute BianPeng V1.0 initialize */ @Mapper public interface UserDao extends BaseMapper { }
21.jpg

xml





    
        
        
        
        
        
        
        
        
        
        
        
        
    
    
        id, login_name, password, nickname, type, state, note, create_time, update_time, update_uid, login_ip, login_addr
    
    

22.jpg

service

/**
 * @filename:UserService CollectionRoute
 * @project wallet-sign  V1.0
 * Copyright(c) 2018 BianPeng Co. Ltd. 
 * All right reserved. 
 */
package com.emep.mall.admin.service;

import com.emep.mall.admin.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
/**   
 * Copyright: Copyright (c) 2019 
 * 
 * 

说明: 资金归集服务层

* @version: V1.0 * @author: BianPeng * * Modification History: * Date Author Version Description *---------------------------------------------------------------* * CollectionRoute BianPeng V1.0 initialize */ public interface UserService extends IService { }
23.jpg

serviceImpl

/**
 * @filename:UserServiceImpl CollectionRoute
 * @project wallet-sign  V1.0
 * Copyright(c) 2018 BianPeng Co. Ltd. 
 * All right reserved. 
 */
package com.emep.mall.admin.service.impl;

import com.emep.mall.admin.entity.User;
import com.emep.mall.admin.dao.UserDao;
import com.emep.mall.admin.service.UserService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

/**   
 * Copyright: Copyright (c) 2019 
 * 
 * 

说明: 资金归集服务实现层

* @version: V1.0 * @author: BianPeng * * Modification History: * Date Author Version Description *---------------------------------------------------------------* * CollectionRoute BianPeng V1.0 initialize */ @Service public class UserServiceImpl extends ServiceImpl implements UserService { }
24.jpg

controller

/**
 * @filename:UserController CollectionRoute
 * @project wallet-sign  V1.0
 * Copyright(c) 2018 BianPeng Co. Ltd. 
 * All right reserved. 
 */
package com.emep.mall.admin.web;



import com.emep.mall.admin.response.JsonResult;
import com.emep.mall.admin.entity.User;
import com.emep.mall.admin.service.UserService;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

/**   
 * Copyright: Copyright (c) 2019 
 * https://my.oschina.net/bianxin/blog/3035352?nocache=1554967026459
 * 

说明: 资金归集API接口层

* @version: V1.0 * @author: BianPeng * * Modification History: * Date Author Version Description *---------------------------------------------------------------* * CollectionRoute BianPeng V1.0 initialize */ @Api(description = "资金归集",value="资金归集" ) @RestController @RequestMapping("/user") public class UserController { Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired public UserService userServiceImpl; /** * @explain 查询资金归集对象 * @param 对象参数:id * @return user * @author BianPeng * @time CollectionRoute */ @GetMapping("/getUserById/{id}") @ApiOperation(value = "获取资金归集信息", notes = "获取资金归集信息[user],作者:BianPeng") @ApiImplicitParam(paramType="path", name = "id", value = "资金归集id", required = true, dataType = "Long") public JsonResult getUserById(@PathVariable("id")Long id){ JsonResult result=new JsonResult(); try { User user=userServiceImpl.getById(id); if (user!=null) { result.setType("success"); result.setMessage("成功"); result.setData(user); } else { logger.error("获取资金归集失败ID:"+id); result.setType("fail"); result.setMessage("你获取的资金归集不存在"); } } catch (Exception e) { logger.error("获取资金归集执行异常:"+e.getMessage()); result=new JsonResult(e); } return result; } /** * @explain 添加或者更新资金归集对象 * @param 对象参数:user * @return int * @author BianPeng * @time CollectionRoute */ @PostMapping("/insertSelective") @ApiOperation(value = "添加资金归集", notes = "添加资金归集[user],作者:BianPeng") public JsonResult insertSelective(User user){ JsonResult result=new JsonResult(); try { boolean rg=userServiceImpl.saveOrUpdate(user); if (rg) { result.setType("success"); result.setMessage("成功"); result.setData(user); } else { logger.error("添加资金归集执行失败:"+user.toString()); result.setType("fail"); result.setMessage("执行失败,请稍后重试"); } } catch (Exception e) { logger.error("添加资金归集执行异常:"+e.getMessage()); result=new JsonResult(e); } return result; } /** * @explain 删除资金归集对象 * @param 对象参数:id * @return int * @author BianPeng * @time CollectionRoute */ @PostMapping("/deleteByPrimaryKey") @ApiOperation(value = "删除资金归集", notes = "删除资金归集,作者:BianPeng") @ApiImplicitParam(paramType="query", name = "id", value = "资金归集id", required = true, dataType = "Long") public JsonResult deleteByPrimaryKey(Long id){ JsonResult result=new JsonResult(); try { boolean reg=userServiceImpl.removeById(id); if (reg) { result.setType("success"); result.setMessage("成功"); result.setData(id); } else { logger.error("删除资金归集失败ID:"+id); result.setType("fail"); result.setMessage("执行错误,请稍后重试"); } } catch (Exception e) { logger.error("删除资金归集执行异常:"+e.getMessage()); result=new JsonResult(e); } return result; } /** * @explain 分页条件查询资金归集 * @param 对象参数:AppPage * @return PageInfo * @author BianPeng * @time CollectionRoute */ @GetMapping("/getUserPages") @ApiOperation(value = "分页查询", notes = "分页查询返回对象[IPage],作者:边鹏") @ApiImplicitParams({ @ApiImplicitParam(paramType="query", name = "pageNum", value = "当前页", required = true, dataType = "int"), @ApiImplicitParam(paramType="query", name = "pageSize", value = "页行数", required = true, dataType = "int") }) public JsonResult> getUserPages(Integer pageNum,Integer pageSize){ JsonResult> result=new JsonResult>(); Page page=new Page(pageNum,pageSize); QueryWrapper queryWrapper =new QueryWrapper(); //分页数据 try { IPage pageInfo=userServiceImpl.page(page, queryWrapper); result.setType("success"); result.setMessage("成功"); result.setData(pageInfo); } catch (Exception e) { logger.error("分页查询资金归集执行异常:"+e.getMessage()); result=new JsonResult>(e); } return result; } }
25.jpg

aJaxResponse

package com.emep.mall.admin.response;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.Serializable;
import java.net.ConnectException;
import java.sql.SQLException;

/**
 * Copyright: Copyright (c) 2019
 *
 * 

说明: 用户服务层

* @version: V1.0 * @author: BianPeng * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019/4/9 flying-cattle V1.0 initialize */ public class JsonResult implements Serializable { Logger logger = LoggerFactory.getLogger(this.getClass()); private static final long serialVersionUID = 1071681926787951549L; /** *

返回状态

*/ private Boolean isTrue=true; /** *

状态码

*/ private String code; /** *

业务码

*/ private String type; /** *

状态说明

*/ private String message; /** *

返回数据

*/ private T data; public Boolean getTrue() { return isTrue; } public void setTrue(Boolean aTrue) { isTrue = aTrue; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public T getData() { return data; } public void setData(T data) { this.data = data; } public String getType() { return type; } public void setType(String type) { this.type = type; } /** *

返回成功

* @param type 业务码 * @param message 错误说明 * @param data 数据 */ public JsonResult(String type, String message, T data) { this.isTrue=true; this.code ="0000"; this.type=type; this.message = message; this.data=data; } public JsonResult() { this.isTrue=true; this.code ="0000"; } public JsonResult(Throwable throwable) { logger.error(throwable+"tt"); this.isTrue=false; if(throwable instanceof NullPointerException){ this.code= "1001"; this.message="空指针:"+throwable; }else if(throwable instanceof ClassCastException ){ this.code= "1002"; this.message="类型强制转换异常:"+throwable; }else if(throwable instanceof ConnectException){ this.code= "1003"; this.message="链接失败:"+throwable; }else if(throwable instanceof IllegalArgumentException ){ this.code= "1004"; this.message="传递非法参数异常:"+throwable; }else if(throwable instanceof NumberFormatException){ this.code= "1005"; this.message="数字格式异常:"+throwable; }else if(throwable instanceof IndexOutOfBoundsException){ this.code= "1006"; this.message="下标越界异常:"+throwable; }else if(throwable instanceof SecurityException){ this.code= "1007"; this.message="安全异常:"+throwable; }else if(throwable instanceof SQLException){ this.code= "1008"; this.message="数据库异常:"+throwable; }else if(throwable instanceof ArithmeticException){ this.code= "1009"; this.message="算术运算异常:"+throwable; }else if(throwable instanceof RuntimeException){ this.code= "1010"; this.message="运行时异常:"+throwable; }else if(throwable instanceof Exception){ logger.error("未知异常:"+throwable); this.code= "9999"; this.message="未知异常"+throwable; } } }
26.jpg

generator生成器

package com.emep.mall.admin.generator;

import com.github.mybatis.fl.entity.BasisInfo;
import com.github.mybatis.fl.util.EntityInfoUtil;
import com.github.mybatis.fl.util.Generator;
import com.github.mybatis.fl.util.MySqlToJavaUtil;

import java.sql.SQLException;
import java.util.Date;

/**
 * @ClassName: MyGenerator
 * @Description:
 * @Author: BYP <[email protected]>
 * @Date: 2020/9/25  23:04
 * @Copyright: 2019 www.tydic.com Inc. All rights reserved.
 * 注意:本内容仅限于弘毅天承信息技术股份有限公司内部传阅,禁止外泄以及用于其他的商业目
 */
/**
 * Copyright: Copyright (c) 2019
 *
 * 

说明: 自动生成工具

*

源码地址:https://gitee.com/flying-cattle/mybatis-dsc-generator

*/ public class MyGenerator { // 基础信息:项目名、作者、版本 public static final String PROJECT = "wallet-sign"; public static final String AUTHOR = "BianPeng"; public static final String VERSION = "V1.0"; // 数据库连接信息:连接URL、用户名、秘密、数据库名 public static final String URL = "jdbc:mysql://127.0.0.1:3306/buybit_wallet_sign?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=true&serverTimezone=UTC"; public static final String NAME = "root"; public static final String PASS = "root"; public static final String DATABASE = "buybit_wallet_sign"; // 类信息:类名、对象名(一般是【类名】的首字母小些)、类说明、时间 public static final String CLASSNAME = "CollectionRoute"; public static final String TABLE = "user"; public static final String CLASSCOMMENT = "用户"; public static final String TIME = "2019年6月12日"; public static final String AGILE = new Date().getTime() + ""; // 路径信息,分开路径方便聚合工程项目,微服务项目 public static final String ENTITY_URL = "com.emep.mall.admin.entity"; public static final String DAO_URL = "com.emep.mall.admin.dao"; public static final String XML_URL = "com.emep.mall.admin.dao.impl"; public static final String SERVICE_URL = "com.emep.mall.admin.service"; public static final String SERVICE_IMPL_URL = "com.emep.mall.admin.service.impl"; public static final String CONTROLLER_URL = "com.emep.mall.admin.web"; //是否是Swagger配置 public static final String IS_SWAGGER = "true"; public static void main(String[] args) { BasisInfo bi = new BasisInfo(PROJECT, AUTHOR, VERSION, URL, NAME, PASS, DATABASE, CLASSNAME, AGILE, ENTITY_URL, DAO_URL, XML_URL, SERVICE_URL, SERVICE_IMPL_URL, CONTROLLER_URL); bi.setTable(TABLE); bi.setEntityName(MySqlToJavaUtil.getClassName(TABLE)); bi.setObjectName(MySqlToJavaUtil.changeToJavaFiled(TABLE)); bi.setEntityComment(CLASSCOMMENT); try { bi = EntityInfoUtil.getInfo(bi); String fileUrl = "D:\\software\\workspace\\idea\\admin\\src\\main\\java\\";// 生成文件存放位置 //开始生成文件 String aa1 = Generator.createEntity(fileUrl, bi).toString(); String aa2 = Generator.createDao(fileUrl, bi).toString(); String aa3 = Generator.createDaoImpl(fileUrl, bi).toString(); String aa4 = Generator.createService(fileUrl, bi).toString(); String aa5 = Generator.createServiceImpl(fileUrl, bi).toString(); String aa6 = Generator.createController(fileUrl, bi).toString(); System.out.println(aa1); System.out.println(aa2); System.out.println(aa3); System.out.println(aa4); System.out.println(aa5); System.out.println(aa6); } catch (SQLException e) { e.printStackTrace(); } } }
27.jpg

如果你生成的分页的方法不能分页:根据官方提升,记得在启动类中加入

@Bean
public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();
}

项目最后的结果给大家展示一下:


28.jpg

你可能感兴趣的:(#mysql8+mybatis-plus3.1自动生成带lombok和swagger和增删改查接口)