热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql8+mybatisplus3.1自动生成带lombok和swagger和增删改查接口

mysql8,mybatis,plus3,1,自动,生成,带,lombok,和,swagger,和
mybatis-dsc-generator

Fork me on Gitee

还在为写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:Order 2018年7月5日 * @project deal-center V1.0 * Copyright(c) 2018 BianP Co. Ltd. * All right reserved. */ 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 *---------------------------------------------------------------* * 2019年4月9日 BianPeng V1.0 initialize */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class User extends Model { private static final long serialVersiOnUID= 1L; @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 = "用户状态") 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 = "loginIp" , value = "登录地址") private String loginAddr; @Override protected Serializable pkVal() { return this.id; } }

DAO

import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import com.xin.usercenter.entity.User; /** * Copyright: Copyright (c) 2019 * * 

说明: 用户数据访问层

* @version: V1.0 * @author: BianPeng * * Modification History: * Date Author Version Description *---------------------------------------------------------------* * 2019年4月9日 BianPeng V1.0 initialize */ @Mapper public interface UserDao extends BaseMapper { }

生成的XML

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

生成的SERVICE

import com.xin.usercenter.entity.User; import com.baomidou.mybatisplus.extension.service.IService; /** * Copyright: Copyright (c) 2019 * * 

说明: 用户服务层

* @version: V1.0 * @author: BianPeng * * Modification History: * Date Author Version Description *------------------------------------------------------------* * 2019年4月9日 BianPeng V1.0 initialize */ public interface UserService extends IService { }

生成的SERVICE_IMPL

import com.xin.usercenter.entity.User; import com.xin.usercenter.dao.UserDao; import com.xin.usercenter.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 *------------------------------------------------------------* * 2019年4月9日 BianPeng V1.0 initialize */ @Service public class UserServiceImpl extends ServiceImpl implements UserService { }

生成的CONTROLLER

import com.item.util.JsonResult; import com.xin.usercenter.entity.User; import com.xin.usercenter.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 * * 

说明: 用户API接口层

* @version: V1.0 * @author: BianPeng * * Modification History: * Date Author Version Description *---------------------------------------------------------------* * 2019年4月9日 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 2019年4月9日 */ @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 2019年4月9日 */ @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 2019年4月9日 */ @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 2019年4月9日 */ @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 { //List list=userServiceImpl.list(queryWrapper); 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; } }

生成完毕,控制器中的JsonResult

import java.io.Serializable; import java.net.ConnectException; import java.sql.SQLException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 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; } } }

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

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

推荐阅读
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 本教程详细介绍了如何使用 TensorFlow 2.0 构建和训练多层感知机(MLP)网络,涵盖回归和分类任务。通过具体示例和代码实现,帮助初学者快速掌握 TensorFlow 的核心概念和操作。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 本文介绍 Java 中如何使用 Year 类的 atMonth 方法将年份和月份组合成 YearMonth 对象,并提供代码示例。 ... [详细]
  • 本文深入探讨了 Java 中 LocalTime 类的 isSupported() 方法,包括其功能、语法和使用示例。通过具体的代码片段,帮助读者理解如何检查特定的时间字段或单位是否被 LocalTime 类支持。 ... [详细]
  • Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
    本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • #print(34or4 ... [详细]
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
author-avatar
IHH_MCWONG_142
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有