В предыдущей статье использование Mybatis Reverse Engineering в основном рассказывает об использовании Mybatis-Generator-Core-1.3.2.jar. В этой статье я хочу представить, чтобы изменить код пакета JAR для достижения генерации пользовательских шаблонов.
1. Отсюда мы можем скачать исходный код Mybatis-Generator-Core-1.3.2.jar Project
http://maven.outofmemory.cn/org.mybatis.generator/mybatis-generator-core/1.3.2/
2. Импортировать существующий проект Maven в рамках Eclipse, File-> Import
Выберите местоположение исходного кода проекта и нажмите «Закончить», чтобы завершить импорт.
Структура каталога проектов примерно такая.
3. Ниже я обращаю картирование и форматы XML для генерации.
4. Начать изменение, сначала объясните каждый каталог
Пакет TSE внизу - мой индивидуальный пакет, который является основным классом, проверяя, соответствует ли сгенерированный код ожидаемым стандартам.
Поскольку этот пакет был написан иностранцами, сгенерированный стиль кода не совсем такой же, как наш. Если вы хотите изменить формат кода, рекомендуется прочитать статью о слоне ананаса. Я не буду говорить о формате кода здесь.
http://www.blogjava.net/bolo/archive/2015/03/20/423683.html
Во -первых, мы сначала изменяем код отображения файла интерфейса, который будет сгенерирован с помощью обратного проекта. По умолчанию есть дополнения, удаления, модификации и поиск. Давайте поговорим об одном из методов модификации для обновления.
Например, я хочу иметь такой метод в сгенерированном обновлении void сопоставления (Map <String, Object> DataMap);
Измените класс UpdateByPrimaryKeyWithOutBsMethodGenerator в Org.mybatis.generator.codegen.mybatis3.javamapper.elements, следующим образом:
/** Copyright 2009 The Apache Software Foundation ** Лицензирован по лицензии Apache, версия 2.0 («Лицензия»);* Вы не можете использовать этот файл, кроме как в соответствии с лицензией.* Вы можете получить копию лицензии по адресу ** http://www.apache.org/license/license-2.0**. Основа,* без каких -либо гарантий или условий, явных или подразумеваемых.* См. Лицензию на конкретные разрешения на управление языком и* ограничения в соответствии с лицензией.*/Пакет org.mybatis.generator.codegen.mybatis3.javamapper.elements; import java.til.set; import java.tleset; org.mybatis.generator.api.dom.java.fulqualifiedjavatype; импорт org.mybatis.generator.api.dom.java.interface; импорт org.mybatis.generator.api.dom.java.javavisibility; импорт org.mybatis.generator.api.mava.java. org.mybatis.generator.api.dom.java.parameter;/**** @author Джефф Батлер**/Общественный класс обновление AddInterfaceElements (интерфейс интерфейса) {set <FullQualifiedJavatype> importTypes = new Treeset <FullQualifiedJavatype>;; полностьюквалифицированный javatype parametertype = new FullqualifiedJavatype (IntrosposcedTable.getBasereCordpe (); импорттип. = new Method (); // добавить модификатор метода publicmethod.setVisability (javavisability.public); // Установить возвращаемое значение, здесь я использую пользовательскую void, метод без возврата значения getVoidinStance () // полностьюквалифицированный класс Полностью cqualifiedJavatype ("void"), просто напишите тип возврата на методе конструктора.setReturnType (полностью cqualifiedJavatype.getVoidInStance ()); // Установить имя метода, вы также можете перейти и см. "записывать")); // $ non-nls-1 $ fullqualifiedJavatype maptype = полностьюквалифицированный javatype.getMyMapInstance (); // Параметр метода, вот параметр datemap параметров типа карты = новый параметр (maptype, "dataMap"); method.addparameter (параметр); context.getCommentGenator (). AddGeneralMethodComment (метод, IntrossectedTable); addMapperannotations (Interfaze, Method); if (context.getPlugins (). ClientUpdateByprimaryKeyKeithoutBlobSmethodGenerated (Метод, интерфейс, интеллекция)) {Interfaze.AddimportEdTypes (importTypes); Interfaze.Addmethod (метод);}} public addmapperantions (Interface Interface, метод rate}}}}}}}}}}) Вы можете изменить его в соответствии с комментариями.
Затем измените код в соответствующем XML отображения. Точно так же, здесь я буду представлять только метод обновления. Я считаю, что после прочтения вы можете изменить другие методы самостоятельно.
Измените класс UpdateByPrimaryKeyWithOutBlobSelementEmenterator в Org.mybatis.generator.codegen.mybatis3.xmlmapper.elements, следующим образом:
/** Copyright 2009 The Apache Software Foundation ** Лицензирован по лицензии Apache, версия 2.0 («Лицензия»);* Вы не можете использовать этот файл, кроме как в соответствии с лицензией.* Вы можете получить копию лицензии по адресу ** http://www.apache.org/license/license-2.0**. Основа,* без каких -либо гарантий или условий, явных или подразумеваемых.* См. Лицензию на конкретные разрешения на управление языком и* ограничения в соответствии с лицензией.*/Пакет org.mybatis.generator.codegen.mybatis3.xmlmapper.elements; import java.util.iterator; импорт java.list; org.mybatis.generator.api.intropposcectedcolumn; import org.mybatis.generator.api.Dom.Outpututilities; import org.mybatis.generator.api.dom.xml.attribut org.mybatis.generator.api.dom.xml.xmleLement; import org.mybatis.generator.codegen.mybatis3.mybatis3formattingutilities;/**** @author jeff butler**/public updatebyprimarywithoutblobselementerator extendsabstractxmlemlentor streanerator strine ISSIMPLE; Public UpdateByPrimaryKeyKeithoutBlobSelementEnerator (Boolean Issimple) {super (); // this.issimple = issimple;}@overridepublic void Addements (xmlelement parentelement) {// Обновление тег (внешний слой метода) xmlelement response = new xmlelement ("Обновление"); // $ non-nls-1 $ // Asses of tag Tag Option out.Addattribute (новый атрибут («id», IntroscectedTable.getUpdateByPrimaryKeyStatementId ())); //$non-nls-1$answer.addattribute(new attribute ("parametertype", // $ non-nls-1 $ "map")); // Добавить тег в context.getCommentgeGenator (). AddComment (ответ); stringBuilder sb = new StringBuilder (); SB.Append ("update"); //$non-nls-1$SB.Append(intropsectedTable.getLifyQualifiedTableNameAtruntime());//tag Content, то есть текстовый элемент ответа. sb.setLength (0); // Установить тег xmlelement setelement = new XmLelement ("set"); // $ non-nls-1 $ // Получить все поля в списке таблиц баз данных <Introsscectedcolumn> cols = inrossosceedtable.getallcolumns (); // iteriation java.util.iterator <introssectedcolumn> iter = cols.iterator (); = iter.next (); // Если тег xmlelement iflement = new xmlelement ("if"); // $ non-nls-1 $ // Имя поля string str = mybatis3formattingutilities.getescapedColumnName (IntroscectedColumn); // Если тег добавить тест атрибута, значение-поле! = NULL и поле! Полеть значение, которое будет изменено SB.Append (mybatis3formattinguity.getescapedColumnName (IntrossectedColumn)); Sb.Append ("="); //$non-nls-1$SB.Append(mybatis3formattinguitiety.getParameterClause(intropsicatedColumn)); if (iter.hasnext ()) {sb.append (',');} // Если тег добавляет вышеуказанный текстовый элемент iflement.addelement (new TextElement (sb.toString ())); if (iter.hasnext ()) {sb.setlength (0); 1);} setelement.addelement (ifelement);} // где элемент (модифицированное предварительное кондиционирование поля) xmleLement Whereelement = new Xmlelement ("где"); для (предпринимаемое восстановление SB.SetLength (0); SB.Append (mybatis3formattinguitiety.getescapedColumnName (IntrossectedColumn)); Sb.Append ("="); //$non-nls-1$SB.Append(myBatis3formattingTultions.getParameterClause(IntropsectedColumn)); LywareElement.AddeLement(New TextElement (SB.ToString ()));} // Добавить набор элемента и куда элемент в самых внешнем xml-элементе в элементе обновления в методе ответ. answer.addeLement (где -нибудь); if (context.getPlugins (). SqlmapupdatebyprimaryKeyWithoutBlobSelementGenerated (ответ, IntrossectedTable)) {ParentElement.AddeLement (ответ);}}} Вы можете изменить другие методы в соответствии с этим методом обновления.
Если вы хотите добавить новый метод, обратитесь к следующему сообщению
http://m.blog.csdn.net/article/details?id=35985705
Далее я проверю результаты модификации
GeneratorConfig.xml // Сначала настройка XML и поместите его в src/main/resources/directory <? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype GeneratorConfiguration public "-// mybatis.org//dtd mybatis generator 1.0 // en" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-Введение файлов конфигурации-> <!-Укажите Джард Data Connection Driver location = "e:/eclipse_workspace/testmybatis/mysql-connector-java-5.1.13-bin.jar"/> <!-один контекст для базы данных-> <context id = "Infoguardian" НЕСПРАВЛЕНИЕ-> <Название свойства = "SupressDate" value = "true"/> <!-Создание того, чтобы генерировать TimeStas-> </commentGenerator> <!-JDBC Connection-> <JDBCConnection DriverClass = "com.mysql.jdbc.driver" connecturl = "jdbc: mysql: // localhost: 33066/logodin? userid = "root" password = "root"/> <!-Type Conversion-> <javatyperesolver> <!-Будь то BigDecimal, False Can автоматически конвертировать следующие типы (длинные, целочисленные, короткие и т. Д.)-> <свойство = "ForceBigDecimals" value = "false"/> </javatyperesolver> <! TargetPackage = "pojo" targetProject = "mybatis3"> <!-Добавить ли новый слой схемы в текущий путь, например: fase path cn.ffcs.test.domain ", true: cn.ffcs.test.domain". -> <и name = "trimstrings" value = "true"/> </javamodelgenerator> <!-генерировать файл mapxml-> <sqlmapgenerator targetpackage = "mapper" targetproject = "mybatis3"> <! true: cn.ffcs.test.domain ". Добавить ли новый слой схемы в текущий путь, например: Fase Path Cn.ffcs.test.domain », True: Cn.ffcs.test.domain». TableName = "login" domainObjectName = "login" enableCountByexample = "false" enabledEleteByexample = "false" enableselectbyexample = "false" enableUpdatebyexample = "false"> </table> </context> </generatorConfiguration>
Startup.java// Основная программа для проверки
Пакет TSE; импорт статический org.junit.assert.assertequals; импорт java.io.file; импорт java.util.arraylist; import java.util.list; import java.util.list; импорт org.mybatis.generator.api.mybatisgenerator; импорт org.mybatis.generaturation. org.mybatis.generator.config.xml.configurationparser; import org.mybatis.generator.internal.defaultshellcallback; открытый класс startup {public static void main (string [] args) выбрасывает исключение {list> warnings = new arraylist <string> (); File (startup.class.getResource ("/generatorConfig.xml"). Touri ()); ConfigurationParser CP = новый ConfigurationParser (предупреждения); конфигурация конфигурации = cp.parseconfiguration (configfile); defaultshellcallCALLBACK = new DefAultCallCallback (TRUE); Mybatisgenerator (config, shellcallback, предупреждения); mybatisgenerator.generate (null); System.out.println (предупреждения);}} ОК, запустить Startup.java
Соответствующий файл генерируется в целевом каталоге в соответствии с конфигурацией GeneratorConfig.xml.
Хорошо, тот же результат, как и я ожидал.
5. После приведенных выше модификаций мы начинаем упаковку.
Поскольку это проект Maven, я использую Maven3.3.9, и вы также можете использовать встроенное Maven Eclipse, но мне все равно это не нравится.
Ниже приведен код файла pom.xml моего проекта Maven
<? xml version = "1.0" Encoding = "UTF-8"?> <!-Copyright 2009-2011 The Mybatis teamlicense по лицензии Apache, версия 2.0 («Лицензия»); Вы не можете использовать этот файл, кроме как в соответствии с лицензией. Вы можете получить копию лицензии Athttp: //www.apache.org/licenses/license-2.0 Unless, требуемое применимым законом или согласовано в письменной форме, SoftwareDistributibuted в соответствии с лицензией распределяется на «как есть», без каких-либо гарантий или условий, не в какой-то не ограниченной, не в какой-то пределе. Лицензия .--> <!-версия: $ 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"><modelversion>4.0.0.0</modelversion><parent><groupid>орг.mybatis.generator</groupid>< artifactid> mybati S-Generator </artifactid> <sersion> 1.3.2 </version> </parent> <artifactid> mybatis-Generator-core </artifactid> <Cackaging> jar </packaging> <mame> mybatis Core Generator </name> <buld> <!-Эта сборка создает и устанавливает инструментальный файл JAR для использования системными проектами-чтобы мы могли собрать консолидированную информацию о покрытии-> <плагины> <!- <blicin> <groupid> org.apache.maven.plugins </GroupId> <ArtifactId> maven-site-plugin </artifactid> <cervision> <performation> <phate> Prepare-package </phase> <Голы> <COLE> Сайт </ogle> </gogle> </выполнение> </исполнение> </plugin> <gole> <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> --><!-- <blicin> <groupid> org.apache.maven.plugins </GroupID> <ArtifactId> maven-source-plugin </artifactid> <sersion> 2.2.1 </version> <diformentions> <dizepution> <id> at tach-sources </id> <geal> <gule> jar </ogle> </ogle> <configuration> <clact> <clact> **/org/** </includ> </incluct> </configuration> </выполнение> </placin> -> <!-<blicin> <groupid> org.apache.maven.plugins </GroupId> <straCactId> Maven-javadoc-plugin </artifactid> <cervision> <seecution> <phase> prepare-package </phase> <geal> <gule> jar </gul> </goot> </выполнение> </reaflections> </gogle> --><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> </плагин> <!- <blicin> <groupid> org.apache.maven.plugins </GroupId> <ArtifactId> maven-jar-plugin </artifactid> <binyburation> <Archive> <manifest> < Mainclass> org.mybatis.generator.api.shellrunner </mainclass> </manifest> </archive> </configuration> <ferformentions> <Ider> <id> Cober Tura-jar </id> <phase> test-test </phase> <come> <gule> jar </gule> </oal> <configuration> <slassicifier> cobertura </classifier> <slassesdirectory> $ {основанный на основе}/target/сгенерированные классы/cobertura </classesdrectory> </configuration> </выполнение> <//cepertion> -> <blicin> <groupid> org.apache.maven.plugins </GroupId> <strifactid> maven-jar-plugin </artifactid> <sersion> 2.4 </version> <cervision> <id> <id> attach-jar </id> <phase> test-test </phase> <gutle> <goga l> jar </oal> </oal> </выполнение> </выполнения> <configuration> <charicive> <manifest> <ddclasspath> true </addclasspath> <classpathprefix> </classpathprefix> <bayclass> org.mybatis.generator.api.shellrunner </main Класс> </manifest> </archive> <clact> <clact> **/org/** </includ> </incluct> </configuration> </placin> <blicin> <groupid> org.apache.maven.plugins </GroupId> <Artifactid> maven-stall-plugin </artifactid> <exe Cutions> <seciption> <id> Cobertura-install </id> <phase> test-test </phase> <cept> <oal> install </gule> </goot> <configuration> <slassifier> cobertura </classifier> </configuration> </выполнение> </выполнения> </plugin> <!-<плагин> <groupid> org.apache.maven.plugins </GroupId> <ArtifactId> maven-assembly-plugin </artifactid> <binyturation> <Scriptors> <cescriptor> $ {основанный} /src/main/assembly/src.xml </descriptor> </src/main/assembly/src.xml <ferainations> <cerfusion> <id> bundle </id> <ogle> <gule> single </gule> </oal> <phase> package </phase> </выполнение> </выполнения> </plagin> -> <blicin> <groupid> org.apache.maven.plugins </GroupId> <strifactid> maven-assembly-plugin </artifactid> <poncisturation> <appendAsembly Id> false </appendasemblyid> <conscriptors> <concriptor> $ {basedir} /src/main/assembly/src.xml </descriptor> </descriptors> </configuration> <ferainations> <cerfusion> <id> Make-Assembly </id> <phase> пакет </phase> <come> <gule> single </goal> </oal> </execution> </выполнение> </placin> <blicin> <groupid> com.googlecode.maven-gcu-glugin </Group> <artifact> maven-gcu-plugin tifactid> <ferainations> <performation> <phase> deploy </phase> <cept> <over> upload </gule> </goot> <figonturation> <pulloads> <pulload> <file> $ {project.build.directory}/$ {project.artifactid}-$ {project.version} -bundle.zip </shook> $ {project.version} </summary> <babels> <babel> Infected </label> <babel> type-archive </label> <babel>-генератор продукта </label> <babel> версия-$ {project.version} </label> </labels> </upload> </uplugs> </configuration> </reecupation>/registions >/plugin> <blicin> <groupid> org.apache.maven.plugins </GroupId> <ArtifactId> maven-release-plugin </artifactid> <ponfiguration> <аргументы> -Полеза, Gupload </arguments> </configuration> </plugin> </plugins> </bui ld> <proteming> <blicins> <blicin> <groupid> org.codehaus.mojo </GroupId> <ratifactid> jdepend-maven-plugin </artifactid> <sersion> 2,0-beta-2 </version> </plagin> <bricin> <groupid> org.codehaus.mojojo </plagin> A-maven-plugin </artifactid> </plugin> </plugins> </reporting> <dependencies> <dehydency> <groupid> log4j </GroupId> <artifactid> log4j </artifactid> <crappope> UPID> <ArtifactId> ant </artifactid> <cracpe> предоставлен </scope> </dependency> <dependency> <groupid> junit </GroupId> <strifactid> junit </artifactid> <crappe> test </scope> </depervice> <Depeication> <groupid> org.hsqldb </GroupId> <stryfif> <dehyed> <groupid> org.HSQLD ActId> HSQLDB </artifactid> <cerpope> test </scope> </deperency> <dependency> <groupid> org.apache.maven.plugins </GroupId> <strifactid> maven-surefire-plugin </artifactid> <sersion> 2,12 </версия> </зависимость> </зависимости> <scm> <URL> https://mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-generator-1.3.2/mybatis-generat или core </url> <nected> scm: svn: https: //mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-gen ether-1.3.2/mybatis-Generator-core </connection> <preventerconnection> scm: svn: https: //mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-generator-1.3.2/mybatis-generator-core </Разработка> </scmerator-1.3.2/mybatis-generator </upporterconnection> </scmer> Затем измените код SRC/Main/Assembly/Src.xml
<сборка 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 > orconfig.xml </includ> </incluct> <cexcludes> <cellide> log4j.properties </exclude> <concellide> src.xml </exclide> </excludes> </fileSet> <FieleSet> <Directory> src/main/scripts </directory> <put outdirectory>/</outputDiretory> <clate ude> run.bat </includ> </incluct> </fileSet> <FieleSet> <Directory> $ {project.build.directory} </Directory> <suptureDirectory>/</outputDirectory> <clact> <clact> $ {project.Artifactid}-$ {project.version} .jar </include> </incluct> </inclate> <//inclate> <//inclate> <//fi Leset> <FiedSet> <cilectory> $ {project.build.directory} </Directory> <sultdirectory>/</outputDirectory> <clact> <clact> $ {project.artifactid}-$ {project.version} -sources.jar </include> </inclate> </fileSet> </assembly> Далее создайте новую папку Scripts в SRC/Main/, Создайте новый текстовый документ TXT в папке Scripts и введите следующий код
java -jar mybatis -Generator -1.3.2.jar -configfile generatorconfig.xml перезапись
пауза
Измените имя файла на run.bat
На этом этапе упаковка и конфигурация завершены.
Вы можете щелкнуть правой кнопкой мыши запустить As-> Maven Build под проектом и ввести пакет в цели. Или введите каталог проекта в CMD в командной строке и запустите пакет MVN. В первый раз, когда вы запустите его здесь, вы будете ждать долгое время, потому что Maven загрузит пакет зависимого JAR, пожалуйста, ждите терпеливо.
После упаковки в целевом каталоге будет генерироваться следующая структура в корневом каталоге проекта.
Из приведенной выше рисунка мы видим, что был сгенерирован пакет Mybatis-Generator-Core-1.3.2.jar. Далее мы можем использовать его для добавления generatorconfig.xml для генерации кода, который мы хотим.
Если вы ничего не понимаете в процессе изменения кода, пожалуйста, прочитайте больше исходного кода.
ОК, покажите результаты
Это все для этой статьи!
Выше приведено соответствующие знания о модификации и упаковке пакета Mybatis Reverse Engineering Jar, представленного вам редактором. Я надеюсь, что это будет полезно для всех!