المقال السابق يستخدم استخدام الهندسة العكسية MyBatis بشكل أساسي عن استخدام MyBatis-Generator-Core-1.3.2.jar. ما أريد تقديمه في هذه المقالة هو تعديل رمز حزمة JAR لتحقيق جيل القوالب المخصصة.
1. من هنا يمكننا تنزيل الكود المصدر لمشروع MyBatis-Generator-Core-1.3.2.jar
http://maven.outofmemory.cn/org.mybatis.generator/mybatis-generator-core/1.3.2/
2. استيراد مشروع Maven الحالي تحت Eclipse ، ملف-
حدد موقع رمز المصدر للمشروع وانقر فوق "إنهاء" لإكمال الاستيراد.
هيكل دليل المشروع هو مثل هذا تقريبا.
3. أدناه أنا عكس تنسيقات التعيين و XML لتوليدها.
4. ابدأ في التعديل ، أوضح أولاً كل دليل
حزمة TSE في الأسفل هي الحزمة المخصصة الخاصة بي ، وهي فئة رئيسية ، واختبار ما إذا كان الرمز الذي تم إنشاؤه يفي بالمعايير المتوقعة.
نظرًا لأن هذه الحزمة كتبها الأجانب ، فإن نمط الكود الذي تم إنشاؤه ليس هو نفسه كبير. إذا كنت ترغب في تعديل تنسيق الكود ، فمن المستحسن قراءة المقالة على الأناناس فيل. لن أتحدث عن تنسيق الكود هنا.
http://www.blogjava.net/bolo/archive/2015/03/20/423683.html
أولاً ، قمنا أولاً بتعديل رمز تعيين ملف الواجهة ليتم إنشاؤه بواسطة المشروع العكسي. بشكل افتراضي ، هناك إضافات وحذف وتعديلات وعمليات بحث. دعنا نتحدث عن إحدى طرق التعديل للتحديث.
على سبيل المثال ، أريد أن أحصل على مثل هذه الطريقة في تحديث الفراغ المولد (MAP <String ، Object> datamap) ؛
قم بتغيير updateByPrimaryKeyWithOutBlobSmethodGenerator فئة تحت org.mybatis.generator.codegen.mybatis3.javamapper.eelement ، على النحو التالي:
؟ الأساس ،* بدون ضمانات أو شروط من أي نوع ، إما صريحة أو ضمنية. org.mybatis.generator.api.java.lyqualifiedjavatype ؛ import org.mybatis.generator.api.java.interface ؛ import org.mybatis.generator.api.java.javavibiability ؛ import org.mybatis.generatory org.mybatis.generator.api.dom.java.parameter ؛/**** Author Jeff Butler**/public class updateByPrimaryWithOutBlobsMeThodGenerator textendsabstractjavampermenerator {public budderbimarywithoutblobsmenator () addInterfaceElements (واجهة واجهة) {set <SelectQualifiedJavatype> importedTypes = new Treeset <SelectQualifiedJavatype> () ؛ = طريقة جديدة () ؛ // إضافة طريقة modifier publicmethod.setVisability (javavisability.public) ؛ // قم بتعيين قيمة الإرجاع ، هنا أستخدم فراغًا مخصصًا ، والطريقة بدون قيمة الإرجاع getVoidinstance () // clan qualifitype class يمكن تخصيص طريقة الإرجاع ، يمكنك إضافةها بنفسك // ما عليك سوى كتابة نوع الإرجاع على طريقة المنشئ. // $ non-nls-1 $ $ qualifiedjavatype maptype = qualifileifiedjavatype.getmymapinstance () ؛ // المعلمة من الطريقة ، وهنا معلمة dateMAP لمعلمة نوع الخريطة = معلمة جديدة (maptype ، "datamap") ؛ method.addparameter (المعلمة) ؛ context.getCommentGenerator (). addGeneralMethodComment (الطريقة ، infrospectable) ؛ addmapperannotations (interfaze ، method) ؛ إذا (context.getPlugins () يمكنك تعديله وفقًا للتعليقات.
بعد ذلك ، قم بتعديل الكود في XML المقابل من رسم الخرائط. وبالمثل ، هنا سأقدم فقط طريقة التحديث. أعتقد أنه بعد قراءته ، يمكنك تعديل طرق أخرى بنفسك.
قم بتغيير updateByPrimaryKeyWithOutBlobslementGenerator Class تحت org.mybatis.generator.codegen.mybatis3.xmlmapper.elements ، على النحو التالي:
؟ أساس ،* بدون ضمانات أو شروط من أي نوع ، إما صريحة أو ضمنية. org.mybatis.generator.api.IntrospectedColumn ؛ استيراد org.mybatis.generator.api.dom.outpututilities ؛ استيراد org.mybatis.generator.api.dom.xml.attribut org.mybatis.generator.api.dom.xml.xmlelement ؛ استيراد org.mybatis.generator.codegen.mybatis3 Issimple ؛ public updateByPrimaryKeyWithOutBlobslementGenerator (Boolean Issimple) {super () ؛ // this.issimple = issimple ؛}@addridepublic void addelements (xmlelement parentlement) // $ non-nls-1 $ // arses من علامة التحديث. . // أضف العلامة إلى context.getCommentGenerator (). addComment (الإجابة) ؛ StringBuilder sb = new StringBuilder () ؛ sb.append ("update") ؛ //$NON-NLS-1$DSB.Append(InTrospected.getlyqualifiedTableNameAtruntime())) ؛//tag محتوى ، أي ، عنصر النص الإجابة. SB.SetLength (0) ؛ // set tag xmlelement setElement = new xmlelement ("set") ؛ . = iter.next () ؛ // if tag xmlelement ifelement = new xmlelement ("if") ؛ // $ non-nls-1 $ // اسم الحقل string str = mybatis3formattingtability.getesCapedColumnName (intersectedColumn) ؛ // إذا كان اختبار سمة إضافة tag ، فإن القيمة هي الحقل! = null و field! = '' ifelement.addattribute (سمة جديدة "، str+"! حقل القيمة المراد تعديلها sb.append (mybatis3formattilities.getesCapedColumnName (outptrosegcolumn)) ؛ sb.append ("=") ؛ . if (iter.hasnext ())) {sb.append ('،') ؛} // إذا أضاف العلامة عنصر النص أعلاه ifelement.addelement (textelement جديد (sb.toString ())) ؛ if (iter.hasnext ()) 1) ، sb.setlength (0) ؛ sb.append (mybatis3formattingtability.getesCapedColumnName (intersegentColumn)) ؛ sb.append ("=") ؛ //$NON-NLS-1$DSB.Append(myBatis3FormattIns.getParameterClause(InTrospectedColumn)) ؛ whereElement.AddElement(new textelement (sb.tostring ())) ؛ الجواب. if (context.getPlugins (). يمكنك تعديل طرق أخرى وفقًا لطريقة التحديث هذه.
إذا كنت ترغب في إضافة طريقة جديدة ، يرجى الرجوع إلى المنشور التالي
http://m.blog.csdn.net/article/details؟id=35985705
بعد ذلك سأتحقق من نتائج التعديل
GeneratorConfig.xml // تكوين XML أولاً ووضعه في SRC/Main/Resources/Directory <؟ ' location = "e: /eclipse_workspace/testmybatis/mysql-connector-java-5.13-bin.jar"/> <!-سياق واحد لقاعدة بيانات-> <context id = "infoguardian" targetRuntime = "myBatis3"> <! value = "true"/> <!-unflemment-> <property name = "cumpressdate" value = "true"/> <!-سواء لإنشاء طوابع زمنية لتوليد التعليقات-> </commentGenerator> <!-connect connectionUrl = "jdbc: mysql: // localhost: 3306/login؟ nailureDing = utf-8" userId = "root" password = "root"/> <!-اكتب تحويل-> <javatyperesolver> <!-سواء كان ذلك لاستخدام BigDecimal ، يمكن تحويل الأنواع التالية تلقائيًا (Long ، integer ، value = "false"/> </javatyperesolver> <!-إنشاء عنوان فئة الكيان-> <javamodelgenerator targetpackage = "pojo" targetproject = "mybatis3"> <!-cneer adleer under the schema under the path path ، eg: fase path cn.ffcs.test.domain ". -> <property name = "enblyubPackages" value = "true"/> <!-سواء للاتصال بالتقليم عند تعيين حقول من نوع السلسلة-> <property name = "trimstrings" value = "true"/> </javamodelgenerator> <! طبقة من المخطط تحت المسار الحالي ، على سبيل المثال: fase path cn.ffcs.test.domain "، true: cn.ffcs.test.domain". type = "xmlmapper" targetpackage = "mapper" targetproject = "mybatis3"> <!-سواءً لإضافة طبقة جديدة من المخطط تحت المسار الحالي ، على سبيل المثال: fase path cn.ffcs.test.domain "، true: cn.ffcs.test.domain". </javaclientgenerator> <!-تكوين معلومات الجدول ، لا يتم إنشاء أي جدول هنا ، يجب تغيير اسم الجدول المقابل مرة واحدة-> <جدول tablename = "login" domainObjectName = "login" enableCountByExample = "false" enabledeletebyexamex = "false" </generatorConfiguration>
startup.java// البرنامج الرئيسي للتحقق
package tse ؛ import static org.junit.assert.assertequals ؛ import java.io org.mybatis.generator.config.xml.configurationParser ؛ import org.mybatis.generator.internal.defaultshellCallback ؛ بدء تشغيل الفئة العامة {File static void main (string [] args) استثناء {list <string> تحذير = erraylist <) ملف (startup.class.getResource ("/generatorconfig.xml"). Touri ()) ؛ configurationParser cp = configurationparser (تحذيرات) MyBatisGenerator (config ، shellcallback ، تحذيرات) ؛ mybatisgenerator.generate (null) ؛ system.out.println (تحذيرات) ؛}} حسنًا ، تشغيل startup.java
يتم إنشاء الملف المقابل في الدليل الهدف وفقًا لتكوين GeneratorConfig.xml.
حسنًا ، نفس النتيجة كما توقعت.
5. بعد التعديلات أعلاه ، نبدأ التغليف.
نظرًا لأنه مشروع Maven ، أستخدم Maven3.3.3.9 ، ويمكنك أيضًا استخدام Eclipse المدمج في Maven ، لكنني لا أحب ذلك على أي حال.
فيما يلي رمز ملف pom.xml لمشروع Maven الخاص بي
<؟ لا يجوز لك استخدام هذا الملف إلا في الامتثال للترخيص. يجوز لك الحصول على نسخة من الترخيص athttp: //www.apache.org/licenses/license-2.0unless المطلوبة بموجب القانون المعمول به أو الموافقة على ذلك ، يتم توزيع ترخيصات محددة بموجب الترخيص المحدد أو المحدد على ذلك. الترخيص .--> <!-الإصدار: $ 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" 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> <الإصدار> 1.3.2 </version> </inpart> <StifactId> mybatis-generator-core </artifactId> <cplaging> جرة </packaging> <name> mybatis Generator Core </name> <build> <!-يقوم هذا الإنشاء بإنشاء وتثبيت ملف جرة مُجهز للاستخدام من قِبل مشاريع الأنظمة-حتى نتمكن من جمع معلومات التغطية الموحدة-> <Plugins> <!- <Plugin> <rougiD> org.apache.maven.plugins </groupId> <ArtifactId> maven-site-plugin </stifactid> <evelopmentions> <evengution> <phase> إعداد package </phase> <irod> الموقع </tord> الموقع </execution> </تنفيذ> </////execution. <rector> <roupiD> org.apache.maven.plugins </groupid> <intifactid> maven-source-plugin </shintifactid> <evelopmentions> <evengution> <phase> إعداد package </phase> <irod> <irod> جرة لا <Plugin> <roupiD> org.apache.maven.plugins </rougiD> <artifactid> maven-source-plugin </shintifactid> <sophy> 2.2.1 </selection> <evelopmentions> <evengution> <id> في TACH-Sources </id> <irod> <irod> جرة </vide> </forts> <configuration> <sudge> <supture> **/org/** </include> </sults> </configuration> </execution> </sultin> -> <!-<uccedin> <roupiD> org.apache.maven.plugins </groupId> <StifactId> maven-javadoc-plugin </stifactid> <evelopmentions> <evengution> <phase> إعداد الحزم </phase> <irod> </diold> </executions> </executions> -> <clupin> <rouckid> org.codehaus.mojo </rougiD> <ArtifactId> Cobertura-Maven-Plugin </stifactid> <evelopmentions> <evelop> <id> cobertura-instrument </id> <fase> ما قبل الضعف </phase> <irod> </plugin> <!- <reclosin> <roupiD> org.apache.maven.plugins </groupId> <intifactid> maven-jar-plugin </shintifactid> <signturation> <Archive> <Mansest> < MainClass> org.mybatis.generator.api.shellrunner </mainclass> </mantest> </erchive> </ispecturation> <evelopmentions> <evelop> <id> cober TORA-JAR </id> <phase> اختبار التكامل </phase> <irod> <lov> جرة </tord> </forts> <configuration> <slassifier> cobertura </slassifier> <ClassDirectory> $ {{}/target/kister classes/cobertura </classdirectory> </isplisturation> </endading> -> <clupin> <rouckid> org.apache.maven.plugins </rougiD> <StifactId> maven-jar-plugin </stifactid> <الإصدار> 2.4 </executions> <executions> <id> إرفاق-jar-jar </id> <fish> التكامل </phase> <goa l> jar </sivel> </forts> </evention> </exjustions> <configuration> <Archive> <Mansest> <AddClassPath> true </addclasspath> <ClassPathpRefix> </slasspathprefix> <mainclass> org.mybatis.generator.api.shellrunner </main class> </mantest> </rarchive> <swerv> <sudence> **/org/** </sudale> </sults> </iscondent> </sultcin> <compint> <roupiD> org.apache.maven.plugins </groupid> <StifactId> maven-install-plugin </restifactid> <eexe Cutions> <evelop> <id> Cobertura-install </id> <phase> اختبار التكامل </phase> <irod> <الهدف> تثبيت </tild> </forts> <iscification> <slassifier> Cobertura </slassifier> </configuration> </execution> </executions> </sultin> <!-<rector> <rougiD> org.apache.maven.plugins </groupId> <StifactId> maven-assembly-plugin </stifactid> <signation> <scription> <scriptor> $ {} <evisions> <evelop> <id> حزمة </id> <irod> <vide> Single </vide> </forts> الحزمة <Phase> </phase> </execution> </exjustions> </suncloy> -> <clupin> <roupled> org.apache.maven.plugins </groupId> <StifactId> maven-assembly-plugin </stifactid> <configuration> <الزائدة الدودية معرف> خطأ </appendasemblyid> <criptciptors> <criptcector> $ {invalirir} /src/main/assembly/src.xml </criptivor> </criptciptor> </configuration> <evelopments> <evelop> <id> make-assembly </id> <phase> package </phase> <irod> <irod> Single </siro> </execution> </execution> </execution> </plugin> <clupin> <roucid> com.googlecode.maven-pcu-plugin </rougeid> maven-gaven </arigin-plugin </arigin-plugin </ari tifactid> <evelopmentions> <execution> <phase> نشر </phase> <irod> <irod> التحميل </tome> </wals> <configuration> <povalists> <pload> <iple> $ {project.build.directory}/$ {project.artifactid}-$ {project.version} -bundle.zip </file> $ {project.version} </summary> <labels> <blable> ظهرت </label> <label> نوع type-archive </billy> <label> penerorator </label> <sably> إصدار-$ {project.version} </billy> </sples> </pload> </uploads> </concepturation> >/plugin> <clupin> <rougiD> org.apache.maven.plugins </groupId> <StifactId> maven-release-plugin </suntifactid> <configuration> <centuments> -prelease ، gupload </enduments> </configuration> </plugin> </bui ld> <reitation> <uccedins> <clupin> <roupiD> org.codehaus.mojo </groupId> <StifactId> jdepend-maven-plugin </intifactid> <splection> 2.0-beta-2 </version> </plugin> </plugin> a-maven-plugin </stifactid> </spliexin> </plugins> </reptoring> <rependencies> <reperence> <roupled> log4j </rougiD> <StifactID> log4j </sultiTsid> <scope> المتوفرة </scope> </perdency> <predency> <roupiD> org.ant </gro upID> <StifactId> ant </stifactid> <scope> المقدمة </scope> </premidency> <reperency> <roupiD> Junit </rougiD> <StifactId> Junit </stifactid> <scope> اختبار </scope> </reperency> <sependency> <sropencid> org.hsqldb </rougeid> <scope> ActId> hsqldb </artifactid> <scope> اختبار </scope> </sependency> <reperency> <roupiD> org.apache.maven.plugins </groupId> </sempactid> maven-surefire-plugin </stifactid> <splex> </version> </emperency> <scm> <Url> https://mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-generator-1.3.2/mybatis-generat or-core </url> <nociety> SCM: SVN: https: //mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-gen Ether-1.3.2/MyBatis-Generator-Core </section> <GeveloperConnection> SCM: SVN: https: //mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-generator-1.3.2/mybatis-generator-core ثم قم بتعديل رمز 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 > <IpaLETT> <IRINESTORY> SRC/MAIN/ROSECENTION </DIRECTORY> <DOUTRODDIRECTORY>/</outputDirectory> <swervans> <sudences> genera orconfig.xml </sudale> </sults> <arcorudes> <arcorude> log4j.properties </exclude> <Exclude> src.xml </isplude> </excludes> </fileset> <Ipantory> src/main/scripts </ ude> run.bat </include> </sults> </fileset> <irector> <cironsory> $ {project.build.directory} </directory> <utportDirectory>/</outputdirectory> <sults> <sudgency> $ {project.artifactid}-$ {project.version} leset> <ilectet> <Irvinory> $ {project.build.directory} </directory> <DountedDirectory>/</outputdirectory> <swern> <sudences> $ {project.artifactid}-$ {project.version} -sources.jar </include> </sult> </ilext> بعد ذلك ، قم بإنشاء مجلد برامج نصية جديدة ضمن SRC/Main/، وإنشاء مستند نص TXT جديد في مجلد البرامج النصية ، وأدخل الكود التالي
Java -jar Mybatis -Generator -1.3.2.jar -ConfiGfile ComplatorConfig.xml الكتابة فوق
يوقف
قم بتغيير اسم الملف إلى Run.bat
في هذه المرحلة ، اكتملت العبوة والتكوين.
يمكنك النقر بزر الماوس الأيمن على تشغيل AS-> Maven Build ضمن المشروع وإدخال الحزمة في الهدف. أو أدخل دليل المشروع في CMD في سطر الأوامر وقم بتشغيل حزمة MVN. في المرة الأولى التي تقوم فيها بتشغيلها هنا ، سوف تنتظر وقتًا طويلاً ، لأن Maven ستقوم بتنزيل حزمة الجرة التابعة ، يرجى الانتظار بصبر.
بعد التغليف ، سيتم إنشاء الهيكل التالي في الدليل المستهدف في الدليل الجذر للمشروع.
من الشكل أعلاه ، يمكننا أن نرى أنه تم إنشاء حزمة MyBatis-Core-1.3.3.jar. بعد ذلك ، يمكننا استخدامه لإضافة generatorconfig.xml لإنشاء الرمز الذي نريده.
إذا كنت لا تفهم أي شيء أثناء عملية تعديل التعليمات البرمجية ، فيرجى قراءة المزيد من الكود المصدري.
حسنًا ، أظهر النتائج
هذا كل شيء لهذا المقال!
ما سبق هو المعرفة ذات الصلة بتعديل وتغليف حزمة جرة هندسة MyBatis العكسية التي قدمها لك المحرر. آمل أن يكون ذلك مفيدًا للجميع!