Der vorherige Artikel Die Verwendung von MyBatis Reverse Engineering spricht hauptsächlich über die Verwendung von MyBatis-Generator-Core-1.3.2.jar. Ich möchte in diesem Artikel vorstellen, um den JAR -Paketcode zu ändern, um die Erzeugung von benutzerdefinierten Vorlagen zu erreichen.
1. Von hier können wir den Quellcode von MyBatis-Generator-Core-1.3.Jar-Projekt herunterladen
http://maven.outofmemory.cn/org.mybatis.generator/mybatis-generator-core/1.3.2/
2. Importieren Sie das vorhandene Maven-Projekt unter Eclipse, Datei-> Importieren
Wählen Sie den Quellcodespeicherort des Projekts aus und klicken Sie auf Fertig stellen, um den Import zu vervollständigen.
Die Projektverzeichnisstruktur ist ungefähr so.
3. unten kte ich die Mapping- und XML -Formate um, um zu erzeugen.
4. Erläutern Sie zuerst jedes Verzeichnis und erläutern Sie zuerst jedes Verzeichnis
Das TSE -Paket unten ist mein angepasster Paket, eine Hauptklasse, die getestet wird, ob der generierte Code den erwarteten Standards entspricht.
Da dieses Paket von Ausländern geschrieben wurde, ist der generierte Code -Stil nicht so genau wie unser. Wenn Sie das Codeformat ändern möchten, wird empfohlen, den Artikel über Ananas -Elefant zu lesen. Ich werde hier nicht über das Codeformat sprechen.
http://www.blogjava.net/bolo/archive/2015/03/20/423683.html
Zunächst ändern wir zunächst den Zuordnungscode der Schnittstellendatei, die durch das umgekehrte Projekt generiert werden sollen. Standardmäßig gibt es Ergänzungen, Löschungen, Änderungen und Suchanfragen. Sprechen wir über eine der Modifikationsmethoden zum Aktualisieren.
Zum Beispiel möchte ich eine solche Methode im generierten Mapping -void -Update (MAP <String, Object> Datamap) haben.
Ändern Sie die Aktualisierung der Klasse von ByprimaryKeyWithoutBlobsMethodgenerator unter org.mybatis.generator.codegen.mybatis3.javamapper.elements Paket wie folgt:
/** Copyright 2009 Die Apache-Software-Stiftung ** lizenziert unter der Apache-Lizenz, Version 2.0 (die "Lizenz");* Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden.* Sie können eine Kopie der Lizenz erhalten. Basis* ohne Garantien oder Bedingungen jeglicher Art, entweder ausdrücklich oder impliziert.* Siehe die Lizenz für die spezifischen Berechtigungen der Sprachgovern und* Einschränkungen nach der Lizenz. org.mybatis.generator.api.dom.java.ulyqualifiedJavatype; import org.mybatis.generator.api.dom.java.interface; org.mybatis.generator.api.dom.java.Parameter;/*** * @author Jeff Butler* */public class UpdateByPrimaryKeyWithoutBLOBsMethodGenerator extendsAbstractJavaMapperMethodGenerator {public UpdateByPrimaryKeyWithoutBLOBsMethodGenerator() {super();}@Overridepublic void AddInterfaceElements (Schnittstellenschnittstelle) {set <vollständigqualifiziertjavatype> ImportedTypes = neuer Treeset <vollständigqualifiziertjavatype> (); vollständigqualifiedJavatype parameterType = newaValifiedJavatype (introspectedTable.GetbasereCordType (); Method (); // Methodenmodifikator PublicMethod.Setvisability (Javavisability.public); // Legen Sie den Rückgabewert fest, hier verwende ich eine benutzerdefinierte Lücke. Geben Sie die Konstruktor -Methode ein. // $ nicht-nls-1 $ vollständigqualifiedJavatype mapType = vollständigqualifiedJavatype.getMymapinStance (); // Der Parameter der Methode ist hier der Datemap-Parameter des MAP-Typs Parameter = neuer Parameter (MAPType, "DataMap"). method.addParameter (Parameter); context.getCompmentGenerator (). AddGeneralMethComent (Methode, introsinedTable); AddMapperannotations (Interfaze, Methode); if (context.getPlugins().clientUpdateByPrimaryKeyWithoutBLOBsMethodGenerated(method,interfaze, introspectedTable)) {interfaze.addImportedTypes(importedTypes);interfaze.addMethod(method);}}public void addMapperAnnotations(Interface interface, Method method) {return;}} Sie können es gemäß den Kommentaren ändern.
Ändern Sie als nächstes den Code im entsprechenden XML der Zuordnung. Ebenso werde ich hier nur die Update -Methode vorstellen. Ich glaube, dass Sie nach dem Lesen andere Methoden selbst ändern können.
Ändern Sie die Aktualisierung der Klasse von ByprimaryKeyWithoutblobSelementGenerator unter org.mybatis.generator.codegen.mybatis3.xmlmapper.elements Paket wie folgt:
/** Copyright 2009 Die Apache-Software-Stiftung ** lizenziert unter der Apache-Lizenz, Version 2.0 (die "Lizenz");* Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden.* Sie können eine Kopie der Lizenz erhalten. Basis* ohne Gewährleistungen oder Bedingungen jeglicher Art, entweder ausdrücklich oder stillschweigend. org.mybatis.generator.api.introspectedColumn; import org.mybatis.generator.api.dom.outpututilities; import org.mybatis.generator org.mybatis.generator.api.dom.xml.xmlelement; import org.mybatis.generator.codegen.mybatis3.mybatis3FormatTingUtities;/**** @Author Jeff Butler**/öffentliche Klassen -Aktualisierung ByprimaryKeyWithoTblobblobStblobblobStlobselementGenerator { isSimple;public UpdateByPrimaryKeyWithoutBLOBsElementGenerator(boolean isSimple) {super();//this.isSimple = isSimple;}@Overridepublic void addElements(XmlElement parentElement) {//update tag (exterior layer of method)XmlElement answer = new XmlElement("update"); // $ nonnls-1 $ // asss des update tag beantwortet.addattribute (neues Attribut ("ID", introsinedTable.getupdatbyprimaryKeyStatementId ())); //$non-nls-1$answer.addattribute(new-Attribut ("parameterType", // $ nicht-nls-1 $ "map")); // das Tag in context.getCompmentGenerator (). AddCompment (Antwort); StringBuilder sb = new StringBuilder (); SB.Append ("Update"); //$non-nls-1$SB.Append(IntrospectedTable.GetingFoyQualifiedTableAMeatruntime())///Tag Inhalt, dh, Textelement Antwort.Addelement (neue TextElement (sb.toString ()); sb.setLength (0); // set tag xmlelement setElement = new Xmlelement ("set"); // $ nicht-nls-1 $ // Alle Felder in der Datenbanktabelle Liste erhalten <introspectedColumn> cols = introspectedTable.getAllcolumns (); // Iteration Java.util.iterator <intropectedColumn> iter = cols.iterator (); = iter.next (); // if Tag xmlelement ifelement = new Xmlelement ("if"); // $ nonnls-1 $ // Feldname String str = mybatis3FormattingUtilities.getScapedColumnName (introspectedColumn); // Wenn Tag-Attribut-Test hinzugefügt wird, ist der Wert Feld! das Feld Der zu modifizierte Wert sb.Append (mybatis3FormattingUtilities.GetescapedColumnName (introspectedColumn)); SB.Append ("="); //$non-nls-1$SB.Append(mybatis3FormattingUtilities.getParameterClause(inRospectedColumn)); if (iter.hasnext ()) {sb.append (',');} // if tag fügt das obige Textelement ifelement.addelement (neue TextElement (sb.toString ()); if (iter.hasnext ()) {sb.setLength (0); 1);}setElement.addElement(ifElement);}//where element (modified field precondition)XmlElement whereElement =new XmlElement("where");for (IntrospectedColumn introspectedColumn : introducedTable.getPrimaryKeyColumns()) {//Transfer the fields in the table to judge sb.setLength (0); //$non-nls-1$SB.Append(mybatis3FormattingUtilities.getParameterclause(inRospectedColumn)); Antwort.Addelement (woelement); if (context.getPlugins (). Sie können andere Methoden gemäß dieser Aktualisierungsmethode ändern.
Wenn Sie eine neue Methode hinzufügen möchten, lesen Sie bitte den folgenden Beitrag
http://m.blog.csdn.net/article/details?id=35985705
Als nächstes werde ich die Modifikationsergebnisse überprüfen
GeneratorConfig.xml // XML zuerst konfigurieren und in das SRC/Main/Ressourcen/Ressourcen/Verzeichnis platzieren. "http://mybatis.org/dtd/mybatis-generator-config_10.dtd"> <generatorConfiguration> <!-Konfigurationsdateien einführen-> <!-Geben Sie die Datenverbindungs-Treiber-JAR-Adresse an-> <classpathEntry an location = "e: /clipse_workspace/testmybatis/mysql-connector-java-5.1.13 --Bin.jar"/> <!-Ein Kontext für eine Datenbank-> <context id = "Infoguardian" targetRuntime = "mybatis3"> <!-comments-> <commentern> <commentern> <commentern> <commentern> <commentern> <commentern> <commentern> <commentern> < value = "true"/> <!-conpresctum-> <Eigenschaft name = "unterdrückung" value = "true"/> <!-Ob die Zeitstempel der Kommentaregenerierung generiert werden soll-> </commentgenerator> <!-Jdbc Connection-> <JdbcConnection TriverClass = "com.mysql.jdbc.drivere" ConnectionUrl = "JDBC: MySQL: // localhost: 3306/login? CharakterCodierung = Utf-8" userID = "root" password = "root"/> <!-Typ Conversion-> <Javatyperesolver> <!-Ob BigDecimal, False Can automatisch konvertieren (lange, Langzeit, intiere, intenger, usw.). value = "false"/> </javatyperesolver> <!-Entitätsklasse-Adresse erzeugen-> <JavamodelGenerator targetPackage = "pojo" targetProject = "mybatis3"> <!-Ob ein neues Schema des aktuellen Pfades hinzugefügt, eg: fase Path Cn.ffcs. --> <property name="enableSubPackages" value="true"/> <!-- Whether to call trim when set for fields of string type --> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- Generate mapxml file --> <sqlMapGenerator targetPackage="mapper" targetProject="mybatis3" > <!-- Whether to add a new layer des Schemas unter dem aktuellen Pfad, z. B. Fase Pfad cn.ffcs.test.domain ", true: cn.ffcs.Test.domain". [Schemaname]-> <Eigenschaft name = "EngsUbpackages" value = "true" /> < /SQLMapGenerator> <!-Generate Mapxml corresponding Client, Issistent client, is is is is is is is is is is is is is is is is is is is is is is is is is is. type = "xmlmapper" targetPackage = "Mapper" targetProject = "mybatis3"> <!-Ob Sie eine neue Schemasebene unter dem aktuellen Pfad hinzufügen sollen, z. </JavaClientGenerator> <!-Die Tabelleninformationen konfigurieren, hier wird keine Tabelle generiert, der entsprechende Tabellenname muss einmal geändert werden-> <table tablename = "login" domainObjectname = "login" EnableCountByExample = "False" EnableDEByExample = "FalseSelectByExample =" falseByExample "-EnableDateByExmast =". </generatorConfiguration>
Startup.java//the Hauptprogramm zur Überprüfung
Paket tse; statische org.junit.assert.assertequals; import java.io.file; import Java.util.ArrayList; import Java.util.list Java.util.list; org.mybatis.generator.config.xml.configurationParser; import org.mybatis.generator File (startup.class.getResource ("/generatorconfig.xml"). Touri ()); configurationParser cp = new ConfigurationParser (Warnungen); configuration config = cp.ParSeConfiguration (configfile); DefaultSchallCallCallback = newnaudSchellCallCallback (true); MyBatisGenerator (config, Shellcallback, Warnungen); MyBatisGenerator.Generate (null); System.out.println (Warnungen);}} OK, startup.java ausführen
Die entsprechende Datei wird im Zielverzeichnis gemäß der Konfiguration von GeneratorConfig.xml generiert.
Ok, das gleiche Ergebnis wie ich erwartet hatte.
5. Nach den oben genannten Änderungen beginnen wir mit der Verpackung.
Da es sich um ein Maven-Projekt handelt, verwende ich Maven3.3.9 und Sie können auch die in Maven integrierte Sonnenfinsternis verwenden, aber ich mag es trotzdem nicht.
Unten finden Sie den Dateicode von Pom.xml meines Maven -Projekts
<xml Version = "1.0" coding = "utf-8"?> <!-Copyright 2009-2011 The MyBatis TeamLicense unter der Apache-Lizenz, Version 2.0 ("Lizenz"); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Sie können eine Kopie der Lizenz erhalten. Lizenz .-> <!-Version: $ ID: pom.xml 4114 2011-11-27 19: 03: 32z Simone.Tripodi $-> <projekt 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"><Modelversion>4.0.0</modelversion>< parent><Groupid>org.mybatis.generator</groupid><Artifactid> mybati S-Generator </artifactId> <version> 1.3.2 </Version> </parent> <artifactid> mybatis-generator-core </artifactid> <packaging> jar </packaging> <name> mybatis Generator Core </name> <build> <!-Dieser Build erstellt und installiert eine instrumentierte JAR-Datei für die Verwendung von Systemprojekten-so können wir konsolidierte Abdeckungsinformationen sammeln-> <Plugins> <!- <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-site-plugin</artifactId><executions><execution><phase>prepare-package</phase><goals><goal>site</goal></goals></execution></execution></plugin> --><!-- <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><executions><execution><phase>prepare-package</phase><goals><goal>jar-no-fork</goal></goals></execution></execution></plugin> --><!-- <plugin> <gruppe> org.apache.maven.plugins </Groupid> <artifactId> maven-source-plugin </artifactId> <version> 2.2.1 </Version> <Ectributions> <Execution> <ID> at Tach-Sources </id> <giele> <giel> jar </gara> </gielen> <configuration> <Clycila> <Clycus> **/org/** </include> </include> </configuration> </Execution> </plugin> --><!-- <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><executions><execution><phase>prepare-package</phase><goals><goal>jar</goal></goals></execution></executions></plugin> --><plugin><groupId>org.codehaus.mojo</groupId><artifactId>cobertura-maven-plugin</artifactId><executions><execution><id>cobertura-instrument</id><phase>pre-integration-test</phase><goals><goal>instrument</goal></goals></execution></executions> </plugin> <!- <plugin> <GroupID> org.apache.maven.plugins </Groupid> <artifactid> maven-jar-plugin </artifactid> <configuration> <archiv> <ifest> < Mainclass> org.mybatis.generator.api.shellrunner </machclass> </manifest> </archive> </configuration> <ceples> <cuber> <id> Cober tura-jar</id><phase>integration-test</phase><goals><goal>jar</goal></goals><configuration><classifier>cobertura</classifier><classesDirectory>${basedir}/target/generated-classes/cobertura</classesDirectory></configuration></execution></executions></plugin> -> <plugin> <GroupId> org.apache.maven.plugins </GroupId> <artifactId> maven-jar-plugin </artifactid> <version> 2.4 </Version> <ausführungen> <ausleitungen> <id> Attach-Jar </id> Integrationstest </Phase> <gas> <gas> <gross l> jar </gara> </gielen> </execution> </executions> <configuration> <archiv> <manifest> <addClASSPath> true </addClASSPath> <classPathPrefix> </classPathprefix> <Mainclass> org.mybatis.generator.api.Shellrunner </Main Klasse> </Manifest> </archive> <clycus> <Clycila> **/org/** </include> </conconest> </plugin> <plugin> <gruppe> org.apache.maven.plugins </Groupid> <artifactId> mavenin-stall-plugin </artifactid> <exe Cutions> <ausführung> <ID> Cobertura-Install </id> <Phase> Integrationstest </Phase> <grosss> <giele> Installation </garan> </gielen> <configuration> <Classifier> cobertura </klassifizierer> </configuration> </Execution> </Executions> </plugin> <!-<plugin> <gruppeId> org.apache.maven.plugins </GroupId> <artifactId> maven-assembly-plugin </artifactId> <configuration> <descriptors> <descriptor> $ {basiert} /src/assembly/src.xm. <Lecutions> <ausführung> <ID> Bundle </id> <giele> <giels> Single </garan> </gores> <phase> Paket </Phase> </Execution> </Executions> </plugin> -> <plugin> <GroupId> org.apache.maven.plugins </Groupid> <artifactId> Maven-Assembly-Plugin </artifactid> <configuration> <anhangasembly Id> false </appendasemblyID> <deskriptors> <descriptor> $ {basiert} /src/main/assembly/src.xml </Deskriptor> </Deskriptors> </configuration> <Lecutions> <ausführung> <ID> Make-assembly </id> <phase> Paket </Phase> <giele> <giels> einzeln </gara> </gores> </execution> </execution> </plugin> <plugin> <gruppe> com.googleCode.maven-gcu-plugin </GroupId> <artifactId> TifactID> <cecutions> <ausführung> <phase> Bereitstellen </phase> <giele> <giele> Upload </Ziel> </Ziele> <Konfiguration> <Uploads> <Upload> <datei> $ {project.build.directory}/$ {project.artifactid}-$ {project.version}-Buntel-Generator ${project.version}</ summary><labels><label>Featured</label><label>Type-Archive</label><label>Product-Generator</label><label>Version-${project.version}</label></labels></upload></uploads></configuration></execution >/executions >/plugin> <plugin> <GroupId> org.apache.maven.plugins </Groupid> <artifactId> maven-release-plugin </artifactId> <configuration> <argumente> -Prelease, Gupload </arguments LD> <REPREITING> <PLUGINS> <PLUGIN> <CROUPID> org.codeHehaus.mojo </GroupId> <artifactId> jdepend-maven-plugin </artifactId> <version> 2.0-beta-2 </Version> </plugin> <Gruppe> org.codenta. a-maven-plugin </artifactId> </plugin> </plugins> </reporting> <abhängigkeiten> <abhängigkeit> <gruppe> log4j </Groupid> <artifactID> log4j </artifactID> <Scope> Bereitstellung </scope> </abhängig> <abhängigkeit> </gruppen- oder GROSPUCTID> oder GROSPAUS.APPACHE.APACH.APACH upid> <artifactId> Ant </artifactId> <Scope> Bereitgestellt </scope> </abhängig> <Deichung> <GroupID> junit </Groupid> <artifactId> junit </artifactId> <Scope> test </scope> </abhängig> <Deponcy> <Gruppe> org.hsqldb </grupp </grupp </grupp </grupp </gruppe </gruppe </gruppe </grupp </gruppe </grupp Actid> hsqldb </artifactId> <Scope> test </scope> </abhängig> <abhängigkeit> <GroupId> org.apache.maven.plugins </GroupId> <artifactId> maven-surefire-plugin </artifactID> <version> 2.12 </Version> </vgl <URL> https://mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-generator-1.3.2/mybatis-generat or-core </url> <Connection> scm: svn: https: //mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-gen Ether-1.3.2/MyBatis-Generator-Core </connection> <entwickelConnection> scm: svn: https: //mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-generator-1.3.2/mybatis-Generator Dann ändern
<Montage 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><Format><Format>zip</format></formats><Filesets > <FileSet> <Dankitory> src/main/ressourcen </danke> <ausgabedirectory>/</outputDirectory> <Clyse> <Clycippe> Gattungen orconfig.xml </include> </include> <ausschließt> <ausschließlich> log4j.properties </exklude> <exklude> src.xml </ausschließe> </ausschließt> </fileSet> <dateiset> <verzeichnis> src/main/scriptory> </optimalDirectory>/</</</</</</</</</</</</</</</</</Ausgabe ude> run.bat </include> </include> </fileSet> <FileSet> <Directory> $ {project.build.directory} </directory> <outputDirectory>/</outputDirectory> <clors> <clors> $ {Project.artifactid}-$ {project.version} .jar .jar .jar </</</</</fi leSet><fileSet><directory>${project.build.directory}</directory><outputDirectory>/</outputDirectory><includes><include>${project.artifactId}-${project.version}-sources.jar</include></includes></fileSet></assembly> Erstellen Sie als Nächst
Java -Jar MyBatis -Generator -1.3.2.jar -configfile Generatorconfig.xml Overwrite
Pause
Ändern Sie den Dateinamen zum Ausführen.bat
Zu diesem Zeitpunkt sind die Verpackung und Konfiguration abgeschlossen.
Sie können mit der rechten Maustaste auf As-> Maven Build unter dem Projekt klicken und das Paket in das Ziel eingeben. Oder geben Sie das Projektverzeichnis in CMD in die Befehlszeile ein und führen Sie das MVN -Paket aus. Wenn Sie es zum ersten Mal hier ausführen, werden Sie lange warten, da Maven das abhängige JAR -Paket herunterlädt, bitte warten Sie geduldig.
Nach der Verpackung wird die folgende Struktur im Zielverzeichnis im Stammverzeichnis des Projekts generiert.
Aus der obigen Abbildung können wir sehen, dass das Paket von MyBatis-Generator-Core-1.3.2.Jar generiert wurde. Als nächstes können wir es verwenden, um GeneratorConfig.xml hinzuzufügen, um den gewünschten Code zu generieren.
Wenn Sie während des Codeänderungsprozesses nichts verstehen, lesen Sie bitte mehr des Quellcode.
OK, zeigen Sie die Ergebnisse
Das ist alles für diesen Artikel!
Das obige ist das relevante Wissen über die Änderung und Verpackung des von dem Herausgebers vorgelegten MyBatis Reverse Engineering JAR -Pakets. Ich hoffe, es wird für alle hilfreich sein!