自定义修改 MyBatis Generator 方法名后缀 Primary Key 为 Id

2024-09-01 21:08

本文主要是介绍自定义修改 MyBatis Generator 方法名后缀 Primary Key 为 Id,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自定义修改 MyBatis Generator 方法名后缀 Primary Key 为 Id

原理

MyBatis Generator 先生成自身自带内容,再调用我们指定的 plugin,最后才将内容刷出到磁盘文件;在其调用 plugin 时会将上下文(包括 Java 方法、Xml 节点)传递过来,此时可以对其已有内容进行定制修改

第一步

在 generatorConfig.xml 文件 context 节点添加 plugin 配置

<generatorConfiguration><context id="simple" targetRuntime="MyBatis3Simple"><plugin type="zhong.mybatis.generator.plugin.MyRenamePkToIdPlugin" /></context>
</generatorConfiguration>

第二步

新建类 zhong.mybatis.generator.plugin.MyRenamePkToIdPlugin

package zhong.mybatis.generator.plugin;import java.lang.reflect.Field;
import java.util.List;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Interface;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.Document;
import org.mybatis.generator.api.dom.xml.Element;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.AbstractXmlElementGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.AbstractJavaMapperMethodGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ReflectionUtils;/*** 重命名 Mapper.java 和 Mapper.xml 文件方法名带 PrimaryKey 的改为 ID。<br>* 如:selectByPrimaryKey 改为 selectById** @author Zhong*/
public class MyRenamePkToIdPlugin extends PluginAdapter {private static final Logger LOGGER = LoggerFactory.getLogger(MyRenamePkToIdPlugin.class);private static final String PK = "PrimaryKey";private static final String ID = "Id";@Overridepublic boolean validate(List<String> warnings) {return true;}@Overridepublic boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) {AbstractXmlElementGenerator plugin = new AbstractXmlElementGenerator() {@Overridepublic void addElements(XmlElement parentElement) {Field f = null;try {f = Attribute.class.getDeclaredField("value");ReflectionUtils.makeAccessible(f);LOGGER.debug(Attribute.class.getName() + " exists declared field 'value'");} catch (NoSuchFieldException e) {throw new IllegalStateException(Attribute.class.getName() + " not exists declared field 'value'");}for (Element e : parentElement.getElements()) {if (e instanceof XmlElement) {XmlElement x = (XmlElement) e;if (x.getName().equals("insert")|| x.getName().equals("delete")|| x.getName().equals("update")|| x.getName().equals("select")) {for (Attribute a : x.getAttributes()) {if (a.getName().equals("id") && a.getValue().endsWith(PK)) {ReflectionUtils.setField(f, a, renamePkToId(a.getValue()));}}}}}}};plugin.setContext(context);plugin.setIntrospectedTable(introspectedTable);plugin.addElements(document.getRootElement());return super.sqlMapDocumentGenerated(document, introspectedTable);}@Overridepublic boolean clientGenerated(Interface theInterface, TopLevelClass topLevelClass,IntrospectedTable introspectedTable) {AbstractJavaMapperMethodGenerator plugin = new AbstractJavaMapperMethodGenerator() {@Overridepublic void addInterfaceElements(Interface interfaze) {for (Method e : interfaze.getMethods()) {if (e.getName().endsWith(PK)) {e.setName(renamePkToId(e.getName()));}}}};plugin.setContext(context);plugin.setIntrospectedTable(introspectedTable);plugin.addInterfaceElements(theInterface);return super.clientGenerated(theInterface, topLevelClass, introspectedTable);}private static String renamePkToId(String name) {if (name.endsWith(PK)) {name = name.substring(0, name.length() - PK.length()) + ID;}return name;}
}

这篇关于自定义修改 MyBatis Generator 方法名后缀 Primary Key 为 Id的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128048

相关文章

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

mybatis中resultMap的association及collectio的使用详解

《mybatis中resultMap的association及collectio的使用详解》MyBatis的resultMap定义数据库结果到Java对象的映射规则,包含id、type等属性,子元素需... 目录1.reusltmap的说明2.association的使用3.collection的使用4.总

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe