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

Mybatis自动生成实体与Mapper工具类

随着MyBatis越来越深入人心,那么在使用Mybatis的时候,最最最麻烦的,莫过于是写Mapper。幸好,万能的程序猿们

随着MyBatis越来越深入人心,那么在使用Mybatis的时候,最最最麻烦的,莫过于是写Mapper。
幸好,万能的程序猿们已经开发出一套方便的工具,根据已有的数据库表来生成对应的JavaBean以及相应的一些Mapper

项目下载地址[]

两个关键类
1、Generator类,程序入口


import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;/*** 数据库实体类生成器** @Autor Shadow 2020/12/9* @Date 2020-12-09 10:32:55*/
public class Generator {public static void main(String[] args) throws Exception {//MBG 执行过程中的警告信息List<String> warnings &#61; new ArrayList<String>();//当生成的代码重复时&#xff0c;覆盖原代码boolean overwrite &#61; true;//读取我们的 MBG 配置文件InputStream is &#61; Generator.class.getResourceAsStream("/generatorConfig.xml");ConfigurationParser cp &#61; new ConfigurationParser(warnings);Configuration config &#61; cp.parseConfiguration(is);is.close();DefaultShellCallback callback &#61; new DefaultShellCallback(overwrite);//创建 MBGMyBatisGenerator myBatisGenerator &#61; new MyBatisGenerator(config, callback, warnings);//执行生成代码myBatisGenerator.generate(null);//输出警告信息for (String warning : warnings) {System.out.println(warning);}}
}

2、MyCommentGenerator注解生成类


import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;import java.util.Properties;/*** 自定义注释生成器* Created by macro on 2018/4/26.*/
public class MyCommentGenerator extends DefaultCommentGenerator {private boolean addRemarkComments &#61; false;private static final String EXAMPLE_SUFFIX &#61; "Example";private static final String API_MODEL_PROPERTY_FULL_CLASS_NAME &#61; "io.swagger.annotations.ApiModelProperty";/*** 设置用户配置的参数*/&#64;Overridepublic void addConfigurationProperties(Properties properties) {super.addConfigurationProperties(properties);this.addRemarkComments &#61; StringUtility.isTrue(properties.getProperty("addRemarkComments"));}/*** 给字段添加注释*/&#64;Overridepublic void addFieldComment(Field field, IntrospectedTable introspectedTable,IntrospectedColumn introspectedColumn) {String remarks &#61; introspectedColumn.getRemarks();//根据参数和备注信息判断是否添加备注信息if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
// addFieldJavaDoc(field, remarks);//数据库中特殊字符需要转义if (remarks.contains("\"")) {remarks &#61; remarks.replace("\"", "&#39;");}addFieldJavaDoc(field, remarks);//给model的字段添加swagger注解field.addJavaDocLine("&#64;ApiModelProperty(value &#61; \"" &#43; remarks &#43; "\")");}}/*** 给model的字段添加注释*/private void addFieldJavaDoc(Field field, String remarks) {//文档注释开始field.addJavaDocLine("/**");//获取数据库字段的备注信息String[] remarkLines &#61; remarks.split(System.getProperty("line.separator"));for (String remarkLine : remarkLines) {field.addJavaDocLine(" * " &#43; remarkLine);}
// addJavadocTag(field, false);field.addJavaDocLine(" */");}&#64;Overridepublic void addJavaFileComment(CompilationUnit compilationUnit) {super.addJavaFileComment(compilationUnit);//只在model中添加swagger注解类的导入if (!compilationUnit.isJavaInterface() && !compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)) {compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));}}
}

3、配置文件 generatorConfig.xml


<generatorConfiguration><properties resource&#61;"generator.properties"/><context id&#61;"MySqlContext" targetRuntime&#61;"MyBatis3" defaultModelType&#61;"flat"><property name&#61;"beginningDelimiter" value&#61;"&#96;"/><property name&#61;"endingDelimiter" value&#61;"&#96;"/><property name&#61;"javaFileEncoding" value&#61;"UTF-8"/><plugin type&#61;"org.mybatis.generator.plugins.SerializablePlugin"/><plugin type&#61;"org.mybatis.generator.plugins.ToStringPlugin"/><plugin type&#61;"org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/><commentGenerator type&#61;"xxx.xxx.xxx.MyCommentGenerator"><property name&#61;"suppressAllComments" value&#61;"true"/><property name&#61;"suppressDate" value&#61;"true"/><property name&#61;"addRemarkComments" value&#61;"true"/>commentGenerator><jdbcConnection driverClass&#61;"${jdbc.driverClass}"connectionURL&#61;"${jdbc.connectionURL}"userId&#61;"${jdbc.username}"password&#61;"${jdbc.password}"><property name&#61;"nullCatalogMeansCurrent" value&#61;"true"/>jdbcConnection><javaModelGenerator targetPackage&#61;"xxx.xxx.xxx.entity" targetProject&#61;"xxx-project/src/main/java"/><sqlMapGenerator targetPackage&#61;"xxx.xxx.xxx.mapper" targetProject&#61;"xxx-project/src/main/resources"/><javaClientGenerator type&#61;"XMLMAPPER" targetPackage&#61;"xxx.xxx.xxx.mapper"targetProject&#61;"xxx-project/src/main/java"/><table tableName&#61;"%"><generatedKey column&#61;"id" sqlStatement&#61;"MySql" identity&#61;"true"/>table>context>
generatorConfiguration>

4、generator.properties文件

jdbc.driverClass&#61;com.mysql.cj.jdbc.Driver
jdbc.connectionURL&#61;jdbc:mysql://127.0.0.1:3306/xxxxx?useUnicode&#61;true&characterEncoding&#61;utf-8&serverTimezone&#61;Asia/Shanghai
jdbc.username&#61;root
jdbc.password&#61;123456

5、pom文件 关键依赖&#xff08;我这里是引入parent-module 所以版本写在其它地方 这里自己找对应版本就好&#xff09;

<dependencies><dependency><groupId>io.springfoxgroupId><artifactId>springfox-swagger-commonartifactId><version>2.9.2version>dependency><dependency><groupId>com.github.pagehelpergroupId><artifactId>pagehelper-spring-boot-starterartifactId><version>1.2.10version>dependency><dependency><groupId>com.alibabagroupId><artifactId>druid-spring-boot-starterartifactId><version>1.1.10version>dependency><dependency><groupId>org.mybatis.generatorgroupId><artifactId>mybatis-generator-coreartifactId><version>1.3.7version>dependency><dependency><groupId>mysqlgroupId><artifactId>mysql-connector-javaartifactId><version>8.0.20version>dependency>dependencies>

效果

生成的Entity
在这里插入图片描述
2、生成的Mapper
在这里插入图片描述


推荐阅读
  • spring boot使用jetty无法启动 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
  • Zabbix自定义监控与邮件告警配置实践
    本文详细介绍了如何在Zabbix中添加自定义监控项目,配置邮件告警功能,并解决测试告警时遇到的邮件不发送问题。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • Beetl是一款先进的Java模板引擎,以其丰富的功能、直观的语法、卓越的性能和易于维护的特点著称。它不仅适用于高响应需求的大型网站,也适合功能复杂的CMS管理系统,提供了一种全新的模板开发体验。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 本文将详细介绍如何使用Java编程语言生成指定数量的不重复随机数,包括具体的实现方法和代码示例。适合初学者和有一定基础的开发者参考。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 深入解析C语言中的关键字及其分类
    本文将全面介绍C语言中的关键字,并按照功能将其分为数据类型关键字、控制结构关键字、存储类别关键字和其他关键字四大类,旨在帮助读者更好地理解和运用这些基本元素。C语言中共有32个关键字。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 高级缩放示例.就像谷歌地图一样.它仅缩放图块,但不缩放整个图像.因此,缩放的瓷砖占据了恒定的记忆,并且不会为大型缩放图像调整大小的图像.对于简化的缩放示例lookhere.在Win ... [详细]
author-avatar
今日屎汰濃
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有