L'article précédent L'utilisation de l'ingénierie inverse de MyBatis parle principalement de l'utilisation de MyBatis-Generator-core-1.3.2.jar. Ce que je veux présenter dans cet article, c'est de modifier le code du package JAR pour réaliser la génération de modèles personnalisés.
1. À partir d'ici, nous pouvons télécharger le code source de MyBatis-Generator-Core-1.3.2.Jar Projet
http://maven.outofmemory.cn/org.mybatis.generator/mybatis-generator-core/1.3.2/
2. Importer le projet Maven existant sous Eclipse, Fichier-> Importer
Sélectionnez l'emplacement du code source du projet et cliquez sur Terminer pour terminer l'importation.
La structure du répertoire du projet est à peu près comme ceci.
3. Ci-dessous, j'inverse les formats de mappage et de XML à générer.
4. Commencez à modifier, expliquez d'abord chaque répertoire
Le package TSE en bas est mon package personnalisé, qui est une classe principale, testant si le code généré répond aux normes attendues.
Étant donné que ce package a été écrit par des étrangers, le style de code généré n'est pas bien le même que le nôtre. Si vous souhaitez modifier le format de code, il est recommandé de lire l'article sur Pineapple Elephant. Je ne parlerai pas du format de code ici.
http://www.blogjava.net/bolo/archive/2015/03/20/423683.html
Tout d'abord, nous modifions d'abord le code de mappage du fichier d'interface à générer par le projet inversé. Par défaut, il y a des ajouts, des suppressions, des modifications et des recherches. Parlons de l'une des méthodes de modification à mettre à jour.
Par exemple, je veux avoir une telle méthode dans la mise à jour du vide de mappage généré (map <string, objet> dataMap);
Modifiez la classe UpdateByPrimaryKeyWithoutBlobsMethodGenerator sous org.mybatis.generator.codegen.mybatis3.javamapper.Elements, comme suit:
/ ** Copyright 2009 The Apache Software Foundation ** Licencié sous la licence Apache, version 2.0 (la "licence"); * Vous ne pouvez pas utiliser ce fichier sauf conforme à la licence. * Vous pouvez obtenir une copie de la licence à ** http://www.apache.org/Licenses/License-2.0*. à moins que la loi applicable ou contenue, ait écrit, le logiciel, "Distribute Base, * sans garanties ni conditions d'aucune sorte, exprimant ou implicite. * Voir la licence pour les autorisations de gouvernance du langage spécifiques et * Limitations sous la licence. * / Pack org.mybatis.generator.api.dom.java.lyqualifiedjavatype; import org.mybatis.generator.api.dom.java.interface; import org.mybatis.generator.api.dom.java.javavisibilité; import org.mebatis.generator.api.dom.java. org.mybatis.generator.api.dom.java.Parameter; / *** * @author Jeff Butler * * / classe publique UpdateByPrimaryKeyWithoutBlobsMethodGenerator étendaBstrAttjavamapperMethodGenerator {public updateByPrimaryWithWithoutBlobsMethodGenerator () {super ();} AddInterfaceElements (interface d'interface) {set <lyQualifiedJavatype> importatedTypes = new Treeset <LotlectQualifiedJavaType> (); entièrement qualiendjavatype ParamètreType = new FleotherifiedJavatype (intospectectTable.getBaserecordType (Add awetho Méthode (); // ajouter la méthode modificateur publicMethod.setVisibility (javavisability.public); // définir la valeur de retour, ici j'utilise un vide personnalisé, la méthode sans valeur de retour getVoidInstance () // en entièrement QualifiedJavatype Class peut-être la nouvelle méthode Type sur la méthode du constructeur.SetReturnType (entièrement QualifiedJavaType.getVoidInstance ()); // Définissez le nom de la méthode, vous pouvez également aller et voir Method.SetName (introspectivedTable.GetUpDateByprimaryStatementsId ()); // Method.AddParamètre (New Paramet (paramètreType, "record")); // $ non nls-1 $ entièrement qualiendjavaType mapType = FullQualifiedJavaType.getMyMapInstance (); // Le paramètre de la méthode, voici le paramètre Datemap du paramètre de type de map = nouveau paramètre (MapType, "DataMap"); Method.AddParameter (paramètre); context.getCommentGenerator (). AddGeneralMethodComment (méthode, introspectedTable); addMapperAnnotations (interfaze, méthode); if (context.getPlugins (). ClientUpDateByPrimaryKeyWithoutBlobSMethodgenerated (Method, Interfaze, IntrospectedTable)) {interfaze.addimportEdTypes (ImportEdTypes); interfaze.addMethod (méthode);}} Vous pouvez le modifier en fonction des commentaires.
Ensuite, modifiez le code dans le XML correspondant du mappage. De même, je ne présenterai ici que la méthode de mise à jour. Je crois qu'après l'avoir lu, vous pouvez modifier vous-même d'autres méthodes.
Modifiez la classe UpdateByPrimaryKeyWithoutBlobSelementGenerator sous org.mybatis.generator.codegen.mybatis3.xmlmapper.Elements Package, comme suit:
/ ** Copyright 2009 The Apache Software Foundation ** Licencié sous la licence Apache, version 2.0 (la "licence"); * Vous ne pouvez pas utiliser ce fichier sauf conforme à la licence. * Vous pouvez obtenir une copie de la licence à ** http://www.apache.org/Licenses/License-2.0*. à moins que la loi applicable ou contenue, ait écrit, le logiciel, "Distribute Base, * sans garanties ni conditions d'aucune sorte, exprimantes ou implicites. * Voir la licence pour les autorisations de gouvernance du langage spécifiques et * Limitations sous la licence. * / Package org.mybatis.generator.codegen.Mybatis3.xmlmapper.Elements; import Java.util.iterator; Importer Java.util.List; Importation; org.mybatis.generator.api.introspectedColumn; import org.mybatis.generator.api.dom.outputUtilities; import org.mybatis.generator.api.dom.xml.attribute; import org.mybatis.generator.api.dom.xml.texttelement; import org.mybatis.generator.api.dom.xml.xmlelement; import org.mybatis.generator.codegen.mybatis3 issimple; public updateByPrimaryKeyWithoutBlobSelementGenerator (boolean issimple) {super (); // this.issimple = issimple;} @ overRidepublic void addElements (xmlelement Parentelement) {// update tag (mise à jour extérieur de la méthode) xmlelement répond = new xmlelement ("update"); // $ non nls-1 $ // ases de la balise de mise à jour réponse.addattribute (nouvel attribut ("id", introspectedTable.getupDateByPrimaryKeyStAtEtted ())); //$non-nlS-1$AnSwer.addattribute(New Attribut ("ParameterType", // $ non nls-1 $ "map")); // Ajouter la balise dans context.getCommentGenerator (). AddComment (réponse); stringBuilder sb = new StringBuilder (); sb.append ("mise à jour"); //$non-nls-1$sb.append(IntospectedTable.getlyqualifiedTableNameAtRuTime()) ;//tag Contenu, c'est-à-dire, text élément réponse.addelement (new textelement (sb.toString ())); sb.setLength (0); // set tag xmlelement setElement = new Xmlelement ("set"); // $ non nls-1 $ // Obtenez tous les champs dans la liste des tableaux de base de données <introspectedColumn> Cols = introspectedTable.getAllColumns (); // itération java.util.iterator <intrespectedColumn> iter = col.Iterator (); while (iter.hasnext ()) {// itatere = iter.next (); // si tag xmlelement ifElement = new Xmlelement ("if"); // $ non nls-1 $ // nom de champ String str = mybatis3formattingutiles.getSapedColumnname (introspectedColumn); // if tag ajouter le test d'attribut, la valeur est champ! = Null et champ! = '' Ifelelement.addattribut (new attribut ("test", six, text, text, text, text tag, tag, coffre Field La valeur à modifier sb.append (MyBatis3FormattingUtilitilities.getEscapedColumnname (IntospectedColumn)); sb.append ("="); //$non-nls-1$sb.append(myBatis3FormattingUtilities.getParameterClause(IntospectedColumn)); if (iter.hasnext ()) {sb.append (',');} // if tag ajoute l'élément de texte ci-dessus ifElement.addelement (new Textelement (sb.tostring ())); if (iter.hasnext ()) {sb.setLength (0); outputUtilities.xmLindent (SB, 1);} setetelement.addelement (ifElement);} // where elemment (précondition de champ modifié) xmlelement where element = new xmlelement ("where"); for (introspectedColumn introspectedColumn: introduittTable.getPrimaryKeymunns ()) {// transférer les champs dans le tableau vers le juge au juge sb.setLength (0); sb.append (mybatis3formattingutibles.getEscapedColumnname (introspectedColumn)); sb.append ("="); //$non-nls-1$sb.append(MyBatis3FormattingUtilities.getParameterClause(IntrospectionColumn)) ;whereLelement.addelement(NEW TextElement (sb.toString ()));} // ajouter l'élément défini et où l'élément dans l'élément de mise à jour XML le plus extérieur dans la méthode réponse. Réponse.Addelement (Where Elelement); if (context.getPlugins (). sqlmapupDateByprimaryKeyWithoutBlobSelementGenerated (réponse, introspectedTable)) {parentement.addelement (réponse);}}} Vous pouvez modifier d'autres méthodes en fonction de cette méthode de mise à jour.
Si vous souhaitez ajouter une nouvelle méthode, veuillez vous référer à la publication suivante
http://m.blog.csdn.net/article/details?id=35985705
Ensuite, je vérifierai les résultats de la modification
GeneratorConfig.xml // Configurez XML d'abord et placez-le dans le SRC / Main / Resources / Directory <? XML Version = "1.0" Encoding = "UTF-8"?> <! DocType GeneratorConfiguration Public "- // Mybatis.org//dtd MyBatis Generator Configuration 1.0 // en" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <eneratorConfiguration> <! - Introduire des fichiers de configuration -> <! - Spécifiez l'adresse JAR du pilote de connexion de données -> <CLASSPATHETRY location = "e: /eclipse_workspace/testmybatis/mysql-connector-java-5.1.13-bin.jar" /> <! - Un contexte pour une base de données -> <context id = "infoguardian" cibleruntime = "Mybatis3"> <! - comment -> <commentgérateur> <propriété Nom = "SuppressComments" Uncomment -> <propriété name = "SuppressDate" value = "true" /> <! - Que ce soit pour générer des horodatages de génération de commentaires -> </ commentgenerator> <! - JDBC Connection -> <jdbccconnection driverclass = "com.mysql.jdbc.driver" ConnectionUrl = "jdbc: mysql: // localhost: 3306 / ligin? CaractoScoding = utf-8" userid = "root" password = "root" /> <! - Type Conversion -> <javatyperesolver> <! - Que ce soit pour utiliser BigDecimal, false peut convertir automatiquement les types suivants (longue value = "false" /> </ javatyperesolver> <! - générer une adresse de classe d'entité -> <javamodelgenerator targetpackage = "pojo" cibleProject = "Mybatis3"> <! - Que ce soit pour ajouter une nouvelle couche de schéma sous le chemin actuel, eg: Fase Path Cn.ffcs.Test.Domain ", true: cn.ffcs.T.Demander". -> <propriété name = "lisetobsubpackages" value = "true" /> <! - Que ce soit pour appeler la garniture lorsque vous définissez des champs de type de chaîne -> <propriété name = "trimStrings" value = "true" /> </ javamodelgenerator> <! - Génerate mapxml fichier Couche de schéma sous le chemin actuel, par exemple: Fase Path Cn.ffcs.test.domain ", true: cn.ffcs.test.domain". [Schemaname] -> <propriété name = "encableBpackages" value = "true" /> </ sqlmapGenerator> <! - Générer Mapxml Client correspondant, c'est-à-dire, interface dao -> <javaclacleator type = "xmlmapper" targetpackage = "mapper" cibleProject = "mybatis3"> <! - Que ce soit pour ajouter une nouvelle couche de schéma sous le chemin actuel, par exemple: le chemin fase cn.ffcs.test.domain ", true: cn.ffcs.test.domain". </ javaclientGenerator> <! - Configurer les informations de la table, aucune table n'est générée ici, le nom de la table correspondant doit être modifié une fois -> <table tableName = "Login" domainObjectName = "Login" apliableCountByExample = </ générateur Configuration>
Startup.java// le programme principal de vérification
Package TSE; Importer Static Org.Junit.Assert.Assertequals; Importer Java.io.file; Importer Java.util.arraylist; Importer Java.util.list; Importer Java.util.list; Importer Org.Mybatis.Generator.API.MybatisGenerator; Import Org.Mybatis.Gecorator.Config.Config org.mybatis.generator.config.xml.configurationParser; import org.mybatis.generator.internal.defaultshellcallback; public class startup {public static void main (string [] args) lance exception {list <string> warnings = new ArrayList <String> (); File (startup.class.getResource ("/ GeneratorConfig.xml"). TOURI ()); configurationPaSer cp = new ConfigurationPaSer (avertissements); configuration config = cp.parseconfiguration (configFile); defaulthellcallback shellCallback = new defaulthellCallback (true); MyBatisGenerator MyBatisGenerrader = New MyBatiSGenerator (config, shellcallback, avertissements); mybatisgenerator.generate (null); System.out.println (avertissements);}} Ok, exécutez startup.java
Le fichier correspondant est généré dans le répertoire cible en fonction de la configuration de GeneratorConfig.xml.
Ok, le même résultat que je m'attendais.
5. Après les modifications ci-dessus, nous commençons l'emballage.
Comme il s'agit d'un projet Maven, j'utilise Maven3.3.9, et vous pouvez également utiliser l'éclipse intégrée Maven, mais je ne l'aime pas de toute façon.
Vous trouverez ci-dessous le code de fichier pom.xml de mon projet Maven
<? xml version = "1.0" Encoding = "UTF-8"?> <! - Copyright 2009-2011 The MyBatis TeamLidense sous la licence Apache, version 2.0 (la "licence"); Vous ne pouvez pas utiliser ce fichier sauf en conformité avec la licence. Vous pouvez obtenir une copie de la licence Athttp: //www.apache.org/licenses/license-2.0Unless requise par la loi applicable ou convenu par écrit, SoftwaredSistrée en vertu de la licence est distribuée sur une "Selon le gouvernement spécifique, sans cesse, sans cesse, soit des limites, soit des limites, soit des limites ou des limites, soit impliquée. Licence .--> <! - Version: $ id: pom.xml 4114 2011-11-27 19: 03: 32z simone.tripodi $ -> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modeversion>4.0.0</modelversion><parent><groupId> S-Generator </ ArfactId> <Dersion> 1.3.2 </DERNIFRATION> </parent> <ArtifActid> Mybatis-Generator-core </refactive> <packaging> jar </packaging> <name> mybatis Générateur Core </name> <uild> <! - Cette version crée et installe un fichier de jar instrumenté pour l'utilisation par les projets Systems - afin que nous puissions recueillir des informations de couverture consolidées -> <Glugins> <! - <flugin> <proupId> org.apache.maven.plugins </prômId> <ArtifactId> maven-site-Plugin </ Artifactid> <Executions> <exécution> </ bujectif> Préparer </ phase> </pilin> Site </ but> </ buts> </kérot <plugin> <proupId> org.apache.maven.plugins </prômId> <Artifactid> Maven-Source-Plugin </lefactive> <Executions> <Exécution> </pilin> Préparent </ Phase> </ Exécution> <harin> <proupId> org.apache.maven.plugins </proupId> <ArtifactId> Maven-Source-Plugin </etefactive> <DERSE> 2.2.1 </ Version> <Executions> <IDECUTION> <ID> AT AT Tach-Sources </id> <pose> <tobjectif> JAR </FORTAGE> </ ORTIFS> <CONFIGURATION> <CUNCHERD> <CUNDE> ** / Org / ** </rupture> </clure> </ Configuration> </ Execution> </ Plugin> -> <! - <plugin> <proupId> org.apache.maven.plugins </prôdId> <Artifactid> Maven-Javadoc-Plugin </ ArtifactId> <Executions> <Exécution> </ Buject> Préparent </ Phase> </ Exécutions> </ Plugin> -> <glugin> <proupId> org.codehaus.mojo </prômId> <ArtifactId> Cobertura-Maven-Plugin </ Id> <gase> Pré-Integration-Test </ / Phase> </ Exécution> Instrument </puil> </puré </ plugin> <! - <flugin> <proupId> org.apache.maven.plugins </prômId> <ArtifactId> Maven-Jar-Plugin </ ArfactId> <Fonfitial> <Carchive> <Affeste> < Mainclass> org.mybatis.generator.api.shellrunner </-mainclass> </ manifest> </rchive> </figfinalisation> <Executions> <exécution> <id> cober TURA-JAR </id> <masé> Integration-test </ phase> <objectifs> <pose> jar </ but> </ings> <fonfiguration> <classificant> Cobertura </ Classifier> <ClassesDirectory> $ {basasedir} / cible / Classement généré / Cobertura </slassDirectory> </FICIGRATION> </EXUCUTION> -> <glugin> <proupId> org.apache.maven.plugins </prômId> <ArtifactId> Maven-Jar-Plugin </ ArtifactId> <DERVIRAGE> 2.4 </ Version> <Executions> <Imd> <id> attach-jar </id> <phase> Integration-Test </strys> <but l> jar </ but> </ buts> </ exécution> </ exécutions> <filony> <Carchive> <Affest> <ddClassPath> true </dddClasspath> <ClassPathPrefix> </ ClassPathPrefix> <mainclass> org.mybatis.generator.api.shellrunner </20In Classe> </ manifeste> </ archive> <clustr> <clut> ** / org / ** </clure> </ incluse> </ configuration> </glugin> <glugin> <proupId> org.apache.maven.plugins </prouvenid> <letifactid> maven-install-plugin </ artifactid> <exe> Citions> <Exécution> <id> Cobertura-Install </id> <gase> Integration-Test </ Phase> <Witals> <Bual> Installer </Facteurs> </proacs> </ Configuration> <Classificant> Cobertura </dissifiant> </FIGIGURATION> </EMECUTUTION> </gingin> <! - <plugin> <proupId> org.apache.maven.plugins </prôdId> <Artifactid> maven-assembly-plugin </ artifactid> <fonfi configuration> <descripteurs> <escriptor> $ {basasedir} /src/main/assembly/src.xml </sscriptor> <Cecultes> <exécution> <id> bundle </id> <pose> <butard> Single </ but> </ buts> </ phase> package </ phase> </écution> </Executions> </gingin> -> <glugin> <proupId> org.apache.maven.plugins </prômId> <Artifactid> Maven-assembly-Plugin </ ArtifactId> <FIFIGIGURATION> <APPENDASEMBLY Id> false </ appendasemblyid> <descriptors> <escriptor> $ {basasedir} /src/main/assembly/src.xml </ descriptor> </ descripteurs> </ configuration> <Executions> <Exécution> <Id> Make-assembly </id> <gase> package </ phase> <wards> <objectif> single </ but> </ings> </Exécution> </Exécution> </gingin> <plugin> <proupId> com.googlecode.maven-gcu-Plugin </ GroupId> <ArtifActid> Maven-Gcu-Plugin </ AR TifACTID> <IMECTRITIONS> <IMECUTION> <MASINE> Deploy </ Phase> <Wats> <Cobjectifs> Téléchargez </ but> </pus> <filony> <pillowings> <loloload> <Fichier> $ {project.build.directory} / $ {project.artifactid} - $ {project.version} -bundle.zip </ file> $ {project.version} </summary> <babels> <label> en vedette </ label> <label> Type-Archive </ Label> </ Label> Product-Generator </Bel> </ Label> Version - $ {Project.Version} </ Label> </ Labels> </ Upload> </ploads> </FIFIGRUPTION> </ Execution> / Exécutions > / plugin> <harin> <proupId> org.apache.maven.plugins </prôdId> <Artifactid> maven-lilease-Plugin </ artifactId> <Fonfi configuration> <roigments> -prelease, gupload </-arguments> </figuration> </ plugin> </glugins> </bui ld> <plating> <handins> <glugin> <groupId> org.codehaus.mojo </prôdId> <Ertifactid> jdepend-maven-plugin </ artifactid> <version> 2.0-beta-2 </ version> </grugin> <lagin> <poulid> org.codehaus.mojo </prunsid> <artifact> Cobertur> Cobertur> A-Maven-Plugin </ ArfactId> </ Plugin> </ Plugins> </Deports> <Dependances> <Dependency> <ProupId> Log4j </rolgleId> <ArtefactId> Log4j </Reptifactid> <ccope> fourni </cope> UPID> <Artifactid> Ant </letefactive> <ccope> fourni </cope> </dpendance> <dependency> <proupId> JUnit </polgyd> <edatid> JUnit </ Artifactid> <cope> test </cope> </sependency> <petendency> <proupId> org.hsqldb </prophed> <artif actid> hsqldb </ artifactid> <ccope> test </ccope> </dependency> <dependency> <proupId> org.apache.maven.plugins </proupId> <Artifactid> maven-Surefire-Plugin </ Artifactid> <Dersion> 2.12 </DERNÉE> </DENDENCY> </Dependants> <scm> <url> https://mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-generator-1.3.2/mybatis-generat Or-core </url> <Connexion> SCM: SVN: https: //mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-gen éther-1.3.2 / mybatis-generator-core </ connection> <DeveloperConnection> SCM: svn: https: //mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-generator-1.3.2/mybatis-generator-core </mybatis> </mybatis-generator </movenerconnection> Modifiez ensuite le code SRC / Main / Assembly / SRC.xml
<assemblage xmlns = "http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns: xsi = "http://www.w3.org/200 1 / xmlschema-INSTANCE "XSI: ScheMalocation =" http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"><id>bundle</id><formats><format>zip</format></formats><filesets > <FichierSed> <Affectif> SRC / Main / Resources </ Directory> <OutputDirectory> / </putputDirectory> <clure> <clut> Géns Orconfig.xml </clure> </ incluse> <clusedes> <clusclude> log4j.properties </cglure> <cgluce> src.xml </clure> </cluses> </fichierset> <Fichiers> <Arectory> src / main / scripts </nigory> <utpreeDirectory> / </putputDiRctory> ude> run.bat </ include> </ incluse> </ fileset> <fichierSet> <Ar répertoire> $ {project.build.directory} </cotory> <putputDirectory> / </putputDirectory> <clustred> <clut> $ {project.artifactid} Leset> <FichierSet> <Ar répertoire> $ {project.build.directory} </nupertory> <utputDirectory> / </utputDirectory> <clure> <clut> $ {project.artifactid} - $ {project.version} -sources.jar </rupture> </clulle> </pichiers> </sembly> Ensuite, créez un nouveau dossier Scripts sous SRC / Main /, créez un nouveau document texte TXT dans le dossier Scripts et entrez le code suivant
Java -Jar Mybatis-Generator-1.3.2.jar -configfile GeneratorConfig.xml Écrasement
pause
Modifiez le nom du fichier en run.bat
À ce stade, l'emballage et la configuration sont terminés.
Vous pouvez cliquer avec le bouton droit sur As-> Maven Build dans le cadre du projet et entrer dans le package dans l'objectif. Ou entrez le répertoire du projet dans CMD dans la ligne de commande et exécutez le package MVN. La première fois que vous l'exécutez ici, vous attendez longtemps, car Maven téléchargera le package de pot à charge, veuillez patiner patiemment.
Après emballage, la structure suivante sera générée dans le répertoire cible dans le répertoire racine du projet.
D'après la figure ci-dessus, nous pouvons voir que le package MyBatis-Generator-core-1.3.2.jar a été généré. Ensuite, nous pouvons l'utiliser pour ajouter GeneratorConfig.xml pour générer le code que nous voulons.
Si vous ne comprenez rien pendant le processus de modification du code, veuillez en savoir plus sur le code source.
OK, montrez les résultats
C’est tout pour cet article!
Ce qui précède est les connaissances pertinentes sur la modification et l'emballage du package de pot ingénierie MyBatis qui vous est présenté par l'éditeur. J'espère que ce sera utile à tous!