O artigo anterior, o uso da engenharia reversa do Mybatis, fala principalmente sobre o uso do Mybatis-Generator-core-1.3.2.Jar. O que quero apresentar neste artigo é modificar o código do pacote JAR para obter a geração de modelos personalizados.
1. A partir daqui, podemos baixar o código-fonte do Mybatis-Generator-core-1.3.2.Jar Project
http://maven.outofmemory.cn/org.mybatis.generator/mybatis-generator-core/1.3.2/
2. Importar o projeto Maven existente em Eclipse, arquivo-> importar
Selecione o local do código -fonte do projeto e clique em Concluir para concluir a importação.
A estrutura do diretório do projeto é aproximadamente assim.
3. Abaixo, reverso os formatos de mapeamento e XML para gerar.
4. Comece a modificar, primeiro explique cada diretório
O pacote TSE na parte inferior é o meu pacote personalizado, que é a classe principal, testando se o código gerado atende aos padrões esperados.
Como este pacote foi escrito por estrangeiros, o estilo de código gerado não é o mesmo que o nosso. Se você deseja modificar o formato do código, é recomendável ler o artigo sobre elefante de abacaxi. Não vou falar sobre o formato de código aqui.
http://www.blogjava.net/bolo/archive/2015/03/20/423683.html
Primeiro, primeiro modificamos o código de mapeamento do arquivo de interface a ser gerado pelo projeto reverso. Por padrão, existem adições, deleções, modificações e pesquisas. Vamos falar sobre um dos métodos de modificação para atualizar.
Por exemplo, eu quero ter esse método na atualização gerada de mapeamento de mapeamento (map <string, objeto> datamap);
Altere a atualizaçãoByPrimaryKeywithoutblobsMethodGenerator Class sob org.mybatis.generator.codegen.mybatis3.javamapper.lements pacote, como segue:
/** Copyright 2009 The Apache Software Foundation ** Licenciado sob a licença Apache, versão 2.0 (a "licença");* Você não pode usar esse arquivo, exceto em conformidade com a licença. "Como está" base,* sem garantias ou condições de qualquer tipo, expresso ou implícito.* Veja a licença para as permissões de governança de idiomas específicas e* limitações sob a licença. org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;import org.mybatis.generator.api.dom.java.Interface;import org.mybatis.generator.api.dom.java.JavaVisibility;import org.mybatis.generator.api.dom.java.Method;import org.mybatis.generator.api.dom.java.parameter;/**** @author jeff butler**/public class UpdateByPrimaryKeywithoutBlobsMethodGenerator ExtensabSttractJavapperMethODGenerator {public) addInterfaceElements (interface interface) {set <TualmentequalifiedJavatype> importedTypes = new TreeSet <TuilyqualiFiedJavatype> (); totalmente qualificadajavatype paramettype = new) totalmentequalificadojavatype (introspectable.getBaseReReTtyTe ();); Method();//Add method modifier PUBLICmethod.setVisability(JavaVisability.PUBLIC);//Set the return value, here I use a custom void, the method without return value getVoidInstance()//FullyQualifiedJavaType class can customize the return value method, you can add it yourself //If you don't want to be so troublesome, you can new FullyQualifiedJavaType("void"), Just write the Tipo de retorno no método do construtor.setrenTyType (totalmente qualificadojavatype.getVoidInstance ()); // Defina o nome do método, você também pode entrar e ver o método.SetName (introspectEdTable.getUpDateByPrimaryKeyStatementId (); // $ não-NLS-1 $ totalmente qualificadojavatype MapType = totalmente qualificadojavatype.getMyMapInstance (); // O parâmetro do método, aqui está o parâmetro de mapa do mapa do tipo parâmetro = novo parâmetro (MapType, "DataMap"); Method.AddParameter (parâmetro); context.getCommentGenerator (). AddGeneralMethodComment (Método, Introspectable); AddMapperAnnotações (interfaze, método); if (context.getplugins (). clientUpdateByPrimaryKeywithoutBlobsMethodGenerated (Método, interfazia, introspectEdTable)) {interfaze.addimportedTypes (»» »}» »» »METETENGINGATIONS); interfaze.addmethod (Método);}}}} votsPaRPRAPTATIONS); Você pode modificá -lo de acordo com os comentários.
Em seguida, modifique o código no XML correspondente do mapeamento. Da mesma forma, aqui vou apresentar apenas o método de atualização. Acredito que, depois de lê -lo, você pode modificar outros métodos sozinho.
Altere a UpdateByPrimaryKeywithoutBlobSelementGenerator Class em org.mybatis.generator.codegen.mybatis3.xmlmapper.lements pacote, como segue:
/** Copyright 2009 The Apache Software Foundation ** Licenciado sob a licença Apache, versão 2.0 (a "licença");* Você não pode usar esse arquivo, exceto em conformidade com a licença. "Como está" base,* sem garantias ou condições de qualquer tipo, expressa ou implícita.* Veja a licença para as permissões de governança de idiomas específicas e* limitações sob a licença. org.mybatis.generator.api.IntRoSpectedColumn; importar org.mybatis.generator.api.dom.outpututities; importar org.mybatis.generator.api.dom.xml.attribute; importar.mextybatis.Generator.Mom.MOM.ML.XML.ATTRIBUTION; NEMPERG.TETBATIS.GENERATOR.MOD.MOM.MLOML.ML.XML.ATTRIBUTO; org.mybatis.generator.api.dom.xml.xmlelement; importar org.mybatis.generator.codegen.mybatis3.mybatis3formattingUtities;/**** @author jeff butler*/public Class Atualização issImple; public updateByPrimaryKeywithoutBlobSelementGenerator (boolean issImple) {super (); // this.issimple = ISSIMPLE;}@Substerpublic void addElements (XmleLement ParentElement) {// Atualize a tag (atualização da camada de exterior do método) xmlement; // $ não-NLS-1 $ // Asses da tag de atualização Answer.addattribute (new attribute ("id", introspectable.getUpdateByPrimaryKeyStatementId ())); //$non-nls-1$answer.addattribute(new attribute ("parameterType", // $ não-NLS-1 $ "mapa")); // Adicione a tag no context.getCommentGenerator (). AddComment (resposta); stringbuilder sb = new stringbuilder (); sb.append ("update"); //$non-nls-1$sb.append(IntRoSpectable.GetlyQualifiedTablenameAtuntime(); sb.setLength (0); // Definir tag xmlelement setElement = new XMLELEMENT ("SET"); // $ não-NLS-1 $ // Obtenha todos os campos na lista de tabela de banco de dados <IntrospectEdColumn> cols = introspechedTable.getAllColumns (); // iteração java.util.iterator <introspechedColumn> iter = cols.iterator (); while (iter.hasnext ()): introspectEdColumn = iter.Next (); // se tag xmlelement ifElement = new xmlelement ("se"); // $ não-nls-1 $ // Nome do campo String str = mybatis3FormattingUtities.GetesCapedColumnName (introspechedColumn); // Se tag Adicionar teste de atributo, o valor é campo! o campo o valor a ser modificado sb.append (mybatis3formattingUtities.getesCapedColumnName (introspectedColumn)); sb.append ("="); //$non-nls-1$sb.append(mybatis3Formattingutilities.getParameterClause(IntRoSpectColumn)); if (iter.hasnext ()) {sb.append (',');} // se tag adicionar o elemento de texto acima ifelement.addElement (new textElement (sb.toString ())); if (iter.hasnext ()) {sb.setLength (0); outpututils.xmlindent (sb.setLength (0); 1);} setElement.AddElement (ifeLement);} // onde elemento (pré -condição de campo modificado) xmlelement WhereElement = new XMLELEMENT ("WHERE"); para (IntrospectedColumn IntrospechedColumn: Introduced.getPrimaryKeyColumns ()) sb.setLength (0); sb.append (mybatis3formattingUtities.getesCapedColumnName (introspectedColumn)); sb.append ("="); //$non-nls-1$sb.append(mybatis3FormattingUtities.getParameterClause(INTROSPEDCOLUMN)); lugarelement.addElement(New textElement (sb.toString ()));} // Adicionar o elemento e onde ele elemento no elemento mais elemento mais XMl ()); Answer.AddElement (WhereElement); if (context.getplugins (). sqlmapupdatebyPrimaryKeywithoutBlobSelementGenerated (Resposta, introspectEdTable)) {ParentElement.adDelement (resposta);}}} Você pode modificar outros métodos de acordo com este método de atualização.
Se você deseja adicionar um novo método, consulte a seguinte postagem
http://m.blog.csdn.net/article/details?id=35985705
Em seguida, verificarei os resultados da modificação
generatorconfig.xml // Configure o XML primeiro e coloque-o no src/main/resources/diretório <? xml versão = "1.0" coding = "utf-8"?> <! Doctype GeneratorConfiguration public "-// mybatis.org//dtd mybatis generator "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorconfiguration> <!-Introduce Arquivos de Configuração-> <!-Especifique o endereço do driver de conexão de dados-> <classe Local = "e: /eclipse_workspace/testmybatis/mysql-connector-java-5.1.13-bin.jar"/> <!-Um contexto para um banco de dados-> <! Uncomment-> <Propriedade name = "suprimeDate" value = "true" /> <!-se deve gerar registros de data e hora de geração de comentários-> < /commentGenerator> <!-jdbc conexão-> <jdbcconnection driverclass = "com.mysql.jdbc.driver" ConnectionUrl = "JDBC: mysql: // localhost: 3306/login? caracterencoding = utf-8" userId = "root" senha = "root"/> <!-digite conversão-> <javatyperesolver> <!-se usa BigDecimal, False pode converter automaticamente (, por meio de seguintes, " value = "false"/> </javatyperesolver> <!-gerar endereço de classe de entidade-> <javamodelGenerator TargetPackage = "Pojo" TargetProject = "mybatis3"> <!-se deve adicionar uma nova camada de esquema sob o caminho atual, por exemplo: fase fase cn.ffcs.stest.dom. true: cn.ffcs.test.Domain ". [schemaname]-> <propriedade name =" enablesubpackages "value =" true "/> <!-se deve chamar a guarnição quando definido para campos de string type-> <names) TargetProject = "mybatis3"> <!-se deve adicionar uma nova camada de esquema no caminho atual, por exemplo: caminho do fase cn.ffcs.test.domain ", true: cn.ffcs.test.domain". IS, interface Dao-> <JavaclientGenerator type = "xmlmapper" TargetPackage = "Mapper" TargetProject = "Mybatis3"> <!-se deve adicionar uma nova camada de schema no caminho atual, por exemplo: fase path cn.ffcs.test.domain ", cn.ffcs.st.st.stest.domeman. name = "enablesubpackages" value = "true" /> < /javaclientGenerator> <!-Configurar informações da tabela, nenhuma tabela é gerada aqui, o nome da tabela correspondente precisa ser alterado uma vez-> <tabela tableName = "Login" Fissexemple "DomainObjectName =" Login " enableUpdateByExample = "false"> </table> </xectlent> </generatorconfiguration>
Startup.java// o programa principal para verificação
pacote tse; importar estático org.junit.assert.assertequals; importar java.io.file; importar java.util.ArrayList; importar java.util.list; importar java.util.list; importação org.mybatis.Generator.Api.MyBatSGenerator; org.mybatis.generator.config.xml.configurationParser; importar org.mybatis.generator.internal.defaultshellCallback; public class startup {public static void main (string [] args) lança Exception {list <string> warnings = newlist <string <string (string [] args) lança {list <string> File (startup.class.getResource ("/generatorconfig.xml"). Touri ()); ConfigurationParser CP = new ConfigurationParser (avisos); configatury config = cp.parseconfiguration (configfile); New MybatisGenerator (config, shellcallback, avisos); mybatisgenerator.generate (null); system.out.println (avisos);}} Ok, execute startup.java
O arquivo correspondente é gerado no diretório de destino de acordo com a configuração do generatorconfig.xml.
OK, o mesmo resultado que eu esperava.
5. Após as modificações acima, começamos a embalagens.
Como é um projeto Maven, eu uso o Maven3.3.9 e você também pode usar o eclipse embutido do Maven, mas não gosto de qualquer maneira.
Abaixo está o código do arquivo pom.xml do meu projeto Maven
<? xml versão = "1.0" coding = "utf-8"?> <!-Copyright 2009-2011 The Mybatis TeamLicense sob a licença Apache, versão 2.0 (a "licença"); you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governance permissions and limitations under A licença .--> <!-Versão: $ id: pom.xml 4114 2011-11-27 19: 03: 32Z Simone.tripodi $-> <Projeto 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 </stifactId> <versão> 1.3.2 </version> </parent> <tutifactId> mybatis-generator-core </artifactId> <batyaging> jar </catching> <name> mybatis Gerador núcleo </name> <brupt> <!-Esta construção cria e instala um arquivo jar instrumentado para uso pelos projetos de sistemas-para que possamos reunir informações de cobertura consolidada-> <Plugins> <!- <Plugin> <GroupID> org.apache.maven.plugins </frupid> <TRATIFACTID> maven-site-plugin </stutifactId> <Executions> <Execution> <shase> preparar package </fase> <lecutes> <lection> site </meta> </metas> </execution> </plpin> </pnpin> </pnpin> <lutack> site </meta> </metas> </execution> </pnpin> </pnpin> </pnpin> </pnpin> </pnpin> <lutack> <Goal> Site </Goal> </metas> </execution> </plpin> </plpin> </pnpin> </pnpin> <lutack> Site </Goal> </meta> </! <Plugin> <UroupId> org.apache.maven.plugins </frupid> <TRARFACTID> maven-source-plugin </starifactId> <Executions> <Execution> <shase> preparar package </execution> <lecty> <tack> jar-fork </meta> </! <lugin> <voundId> org.apache.maven.plugins </groupiD> <TROTIFACTID> maven-source-plugin </artifactId> <versão> 2.2.1 </version> <Comestions> <Execution> <ID> em Soldes tach </dod> <tecles> <Goal> jar </ase> </acestes> <frifiguration> <inclui> <dits> **/org/** </inclui> </bticbs> </figuration> </secution> </plugin> -> <!-<flugin> <roupiid> org.apache.maven.plugins </groupiD> <TarifactId> MAVEN-JAVADOC-PLUGIN </ArtifactId> <Comestions> </execution> <shase> preparar package </shase> <lack> jar <//metal> </iniM> </extion> --><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> <voundId> org.apache.maven.plugins </frupid> <TRAFACTID> maven-jar-pplugin </sutifactId> <figuration> <chchive> <manifesto> < mainClass> org.mybatis.generator.api.shellrunner </rainClass> </san Manifest> </Archive> </figuration> <c Executions> <demecution> <d> cober TURA-JAR </dd> <shase> integração-teste </shase> <tecles> <Goal> jar </as Goal> </metas> <figuration> <fretifier> Cobertura </SSELSIFIER> <CLASSESDIRECTORY> $ {BASEDIR}/Target/Generated-Classes/CoberturA </ClassDirectory> </conflions> </conflions> </fligings> </plin -> <lugin> <roupidId> org.apache.maven.plugins </groupiD> <TRAFACTID> maven-jar-plugin </stifactId> <versão> 2.4 </sipers> <domestions> <secution> <id> Anex-jar </id> <fase> <fase> testest-stest </fetes> <tacks> <tacka> <dane> L> jar </age> </acestes> </secution> </execuções> <frifiguration> <chchive> <manifest> <ditclasspath> true </addclasspath> <ctempathPrefix> </classpathPrefix> <laintClass> org.mybatis.Generator.api.shellrunner </mainner Class> </manifesto> </chive> <inclui> <cluir> **/org/** </incluir> </incluir> </figuration> </plugin> <lugin> <plupid> org.apache.maven.plugins </groupid> <stifactId> Maven-Install-plugin </ArtifactId> <stifactId> Cutions> <Execution> <id> CobertURA-Install </dod> <shase> integração-test </fase> <tecles> <Goal> Instalar </as Goal> </metas> <figuration> <scletifier> Cobertura </Classifier> </figuration> </secution> </conformions> </plugin> <!-<lampleg> <plugiD> org.apache.maven.plugins </groupiD> <stifactId> maven-assembly-pplugin </storkactid> <figuration> <scriptors> <sec descrittor> $ {Based} /src/main/assembersbors> <Comestuions> <destle> <id> pacote </dod> <tecles> <lection> Único </as Goal> </metas> <shase> pacote </shase> </secution> </execuções> </plugin> -> <flugin> <puperid> org.apache.maven.plugins </groupId> <TarifactId> maven-assembly-plugin </stifactId> <figuration> <AppendasEmbly Id> false </ppendasemblyId> <scriptors> <secriptor> $ {baseado} /src/main/assembly/src.xml </sec Descripttor> </descritores> </figuration> <Ecc oucions> <dent- ofCution> <id> Make-Montybly </ds> <fase> pacote </shets> <lecutes> <lect> single </as Goal> </metas> </secution> </secution> </plugin> <clugin> <plupId> com.googlecode.Maven-gcu-plugin </grupidid> <strif> com.googlecode.Maven-gcu-plugin </GroupId> <tistif> M-Maven tifactId> <Executions> <Execution> <shase> Implante </shase> <gestes> <lection> upload </as Goal> </acestes> <frifiguration> <uploads> <ouplot> <File> $ {Project.build.directory}/$ {ProjectIfactId}-{$ {Project.vertsion} $ {Project.version} </summary> <bateels> <breting> em destaque >/plugin> <flugin> <plugId> org.apache.maven.plugins </foupid> <TRARFACTID> MAVEN-RELEASE-PLUGIN </ArtifactId> <figuration> </Arguments> -Prelease, GUPLOAD </argumentos> </figuration> </plugins> </plugins> </bui LD> <Selmatorying> <flugins> <lugin> <puperid> org.codehaus.mojo </groupiD> <TRAFACTID> jdepend-maven-plugin </artifactId> <siperS> 2.0-beta-2 </sipers> </plugin> <plugin> <vtrout> <strict.Ircodehaus.mo.mo.mo </versão> </plugin> <plugin> <vtrout> <strg.codehaus.moko </version> </plugin> <plugin> <plugin> <vtrist> <tratert> <turt> <tryact.Urg.Ut-BETA-2 </Version> </plugin> <plugin> <vtrout> <strot> <turt> <turt> <tryact.Urg.Ut-BETA-2 a-maven-plugin </starifactId> </plugin> </plugins> </lorporation> <pendências> <pendence> <puperid> log4j </groupid> <stifactId> log4j </artifactid> <cope> fornecido </scope> </ipendency> <pendency> <purfactid> oug.Apache.ant <scope> fornecido </scope> </dependency> <pendency> <broupId> orgache.apache.ant </scope> </dependency> <Pundincy> orgache.ant UPID> </ArtifactId> Ant </sutifactId> <cope> fornecido </scope> </dependency> <pendence> <puperid> junit </foupid> <stifactId> junit </starfactId> <cope> teste </scope> </dependency> <PundiD> ORG.HSQLDB </groupdb actId>hsqldb</artifactId><scope>test</scope></dependency><dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.12</version></dependency></dependencies><scm> <url> https://mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-generator-1.3.2/mybatis-generat Or-core </url> <neconoms> scm: svn: https: //mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-gen ether-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</developerConnection></scm> </project> Em seguida, modifique o código src/main/Assembly/src.xml
<Assembléia 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"><idbundle</id><formats><format>zip</format></formats><FileSets > <FileSet> <Directory> src/main/recursos </diretório> <putputDirectory>/</outputDirectory> <inclui> <incluir> gêneros orConfig.xml</include></includes><excludes><exclude>log4j.properties</exclude><exclude>src.xml</exclude></excludes></fileSet><fileSet><directory>src/main/scripts</directory><outputDirectory>/</outputDirectory><incl ude> run.bat </bticbtion> </bticbsion> </fileSet> <FileSet> <Directory> $ {Project.build.directory} </diretório> <putputDirectory>/</outputdirectory> <cunciBs> <cubs> $ {Project.artifactId}-$ {Project.version leSet><fileSet><directory>${project.build.directory}</directory><outputDirectory>/</outputDirectory><includes><include>${project.artifactId}-${project.version}-sources.jar</include></includes></fileSet></assembly> Em seguida, crie uma nova pasta de scripts em SRC/Main/, crie um novo documento de texto TXT na pasta Scripts e digite o seguinte código
java -Jar mybatis-generator-1.3.2.jar -configfile generatorconfig.xml Substituição
pausa
Altere o nome do arquivo para executar.bat
Neste ponto, a embalagem e a configuração estão completas.
Você pode clicar com o botão direito do mouse em execução como-> Maven Build sob o projeto e inserir o pacote na meta. Ou insira o diretório do projeto no CMD na linha de comando e execute o pacote MVN. Na primeira vez em que você o executa aqui, você esperará muito tempo, porque o Maven baixará o pacote JAR dependente, espere pacientemente.
Após a embalagem, a seguinte estrutura será gerada no diretório de destino no diretório raiz do projeto.
A partir da figura acima, podemos ver que o pacote Mybatis-Generator-core-1.3.2.2.jar foi gerado. Em seguida, podemos usá -lo para adicionar o generatorconfig.xml para gerar o código que desejamos.
Se você não entende nada durante o processo de modificação do código, leia mais do código -fonte.
Ok, mostre os resultados
Isso é tudo para este artigo!
O exposto acima é o conhecimento relevante sobre a modificação e embalagem do pacote de jar de engenharia reversa de Mybatis apresentado a você pelo editor. Espero que seja útil para todos!