MyBatis هو إطار عمل ممتاز لطبقة الثبات يدعم استعلامات SQL العادية والإجراءات المخزنة والتعيين المتقدم. يقوم MyBatis بإلغاء الإعدادات اليدوية لجميع كود JDBC والمعلمات تقريبًا والبحث عن مجموعات النتائج. يستخدم MyBatis XML أو التعليقات التوضيحية البسيطة للتكوين والتعيين الأصلي لتعيين واجهات و Pojos من Java (كائنات Java القديمة) في سجلات في قاعدة البيانات.
MyBatis هو مشروع مفتوح المصدر من Apache. في عام 2010 ، تم نقل هذا المشروع من مؤسسة Apache Software Foundation إلى Google Code وتم إعادة تسمية MyBatis.
تم ترحيله إلى Github في نوفمبر 2013 ، عنوان GitHub MyBatis: https://github.com/mybatis/mybatis-3.
يأتي مصطلح Ibatis من مزيج من "الإنترنت" و "Abatis" ، وهو إطار طبقة الثبات القائم على Java. يوفر Ibatis أطر طبقة الثبات بما في ذلك خرائط SQL وكائنات الوصول إلى البيانات (DAO).
يستخدم كل تطبيق MyBatis بشكل أساسي مثيلات SQLSessionFactory ، ويمكن الحصول على مثيل SQLSessionFactory من خلال SQLSessionFactoryBuilder. يمكن الحصول على SQLSessionFactoryBuilder من ملف تكوين XML أو مثيل لفئة التكوين المحددة مسبقًا.
1. استخدم المولد لإنشاء طبقة DAO وطبقة النموذج تلقائيًا وطبقة MAPPER.
MyBatis Generator عنوان تنزيل: http://www.mybatis.org/generator/
MyBatis Generator Chinese Indister: http://generator.sturgeon.mopaas.com/
ما يلي يستخدم المكون الإضافي MyBatis-Generator-Core-1.3.2.jar لإضافة حزمة اتصال قاعدة بيانات JDBC لتصدير حزمة DAO للطبقة التلقائي وحزمة النماذج وحزمة MAPPER.
حزم Java التي يجب استخدامها هي:
MyBatis-Generator-Core-1.3.2.jar ،
mysql-connector-java-5.1.34.jar ،
OJDBC14-10.2.0.1.0.JAR ،
SQLJDBC4-4.0.JAR.
ملف التكوين: generator.xml
<؟ يتم استخدام ملف خاصية التكوين لإدخال تعبيرات EL المتغيرة في ملف التكوين-> <!-إذا قمت بتشغيله في CMD ، فيجب عليك كتابة المسار الكامل في عنوان URL لأنه لا يمكن العثور على ClassPath. للموارد-> <!-<properties url = "file: /// d: /Workspaces/mybatisgen/bin/generatorConfig.properties"/>-> <!-موقع حزمة برنامج Database-> <!-حزمة بيانات خادم SQL-> حزمة برنامج تشغيل Oracle Data-> <!-<classpathentry location = "d: /java/m2/repository/com/oracle/ojdbc14/10.2.0.1.0/ojdbc14-10.2.0.0.jar"/>-> <! location = "d: /javaproject/generator/mysql-connector-java-5.1.34.jar"/>-> <!-هنا يحدد أن DAO لـ MyBatis3-> <!-معرف: يجب تكوينه. المعرف الفريد لهذا السياق. سيتم استخدام هذه القيمة في بعض رسائل الخطأ. DefaultModelType: يستخدم لتحديد سياسة نوع النموذج التوليدي. 1. السياسة الافتراضية التقليدية ، قم بإنشاء فئة نموذجية لكل جدول. هذه علاقة مناسبة بين الطبقات الموروثة. TargetRuntime: يتم استخدام هذه الخاصية لتحديد الكود الذي تم إنشاؤه بواسطة هدف وقت التشغيل. 1.MyBatis3 ستنشئ القيم الافتراضية كائنات متوافقة مع MyBatis الإصدار 3.0 وبعد ذلك ، و JSE 5.0 وبعد ذلك (على سبيل المثال ، ستستخدم نماذج Java وواجهات Mapper أنواعًا عامة). تدعم طريقة "مثال" ديناميكية غير محدودة تقريبًا حيث الجمل على هذه الكائنات التي تم إنشاؤها. بالإضافة إلى ذلك ، تدعم كائنات Java مع هذه المولدات العديد من ميزات JSE 5.0 بما في ذلك الأنواع والتعليقات المعلمة. 2.ibatis2java2 3.ibatis2java5-> <context id = "mysqltables" targetruntime = "mybatis3" defaultModelType = "شرطي"> <!-<plugin type = "org.mybatis.generator.plugins.equalshashcodeplugin" />-> <! خطأ يتم استخدام هذه الخاصية لتحديد ما إذا كان سيتم تضمين أي تعليقات في الكود الذي تم إنشاؤه. إذا تم تعيينه على TRUE ، فلن يتم إنشاء أي تعليق 2. يتم استخدام الإعدادات الافتراضية لخطأ في هذه الخاصية لتحديد ما إذا كان التعليق الذي تم إنشاؤه سيشمل الطابع الزمني لتوليد MBG. -> <SOMENGERERATOR> <property name = "crupressallcomments" value = "true" /> < /commentGenerator> <!-عنوان URL لعلاقة قاعدة البيانات ، اسم المستخدم ، كلمة المرور-> <!-MySQL Database Link url ، اسم المستخدم ، كلمة المرور-> <! ConnectionUrl = "jdbc: mysql: //127.0.0.1: 3310/test" userid = "test" password = "1234"> </jdbcconnection>-> <! ConnectionUrl = "jdbc: Oracle: Thin:@127.0.0.1: 1521: orcl" userid = "test" password = "1234" driverClass = "com.microsoft.sqlserver.jdbc.sqlServerDriver" connectionurl = "jdbc: sqlserver: //127.0.0.1: 1433 ؛ databasename = test" userid = "test" password = 1234 " key = "jdbc.url"> jdbc: h2: tcp: // localhost/test </tense> <intrade key = "jdbc.driver"> org.h2.driver </tension>-> <!-sqlserver2000 <entry key = "jdbc.url"> jdbc: microsoft: sqlserver: // localhost: 1433 ؛ databasEname = [database] </entry> <intrading key = "jdbc.driver key = "jdbc.url"> jdbc: sqlserver: //192.168.0.98: 1433 ؛ databasEname = [database] </intrade> <intrade key = "jdbc.driver"> com.microsoft.sqlserver.jdbc.sqlsqlserver key = "jdbc.url"> jdbc: jtds: sqlserver: //192.168.0.102: 1433/[database] ؛ tds = 8.0 ؛ lastupdateCount = true </entry> <intrading key = "jdbc.driver key = "jdbc.url"> jdbc: postgresql: // localhost/[database] </entry> <intrade key = "jdbc.driver"> org.postgresql.driver </repress>-> <!-sybase <intern key = "jdbc.url"> jdbc: sybase: key = "jdbc.driver"> com.sybase.jdbc.sybdriver </interviver hsqldb <interpt key = "jdbc.url"> jdbc: hsqldb: mem: generatordb </entry> <interpt key = "jdbc.driver"> org.hsqldb.jdbcdriver </entr key = "jdbc.driver"> org.apache.derby.jdbc.clientdriver </tense>-> <!-تكوين نوع Java type اختياري-> <!-<javatyperesolver type = ""> نوع خاصية: يمكن استخدام هذا لتحديد نموذج Java نوع Java. يجب أن تنفذ هذه الفئة واجهة org.mybatis.generator.api. Javatyperesolver ، يجب أن يكون هناك مُنشئ افتراضي عام. يمكن أن يقبل الخاصية أيضًا القيم الخاصة افتراضيًا في هذه الحالة ، وسيتم استخدام التنفيذ الافتراضي (لا يحدد نفس التأثير النوع). الخصائص التي تدعمها هذه العلامة: ForceBigDecimals: الافتراضي هو خطأ ما إذا كان يجب إجبار BigDecimal على تمثيل جميع الحقول العشرية والرقمية. • إذا كان المقياس كبيرًا وكان الطول أكبر من 18 ، فسيتم استخدام النوع الكبير. • إذا كان طوله من 10 إلى 18 ، فإن محلل جافا سيحل محل java.lang.long. • إذا كان الطول هو 5 إلى 9 ، فسيتم استبدال محلل جافا نوع java.lang.integer. • إذا كان طوله أقل من 5 ، فسيتم استبدال محلل جافا نوع Java.lang.short. -> <Javatyperesolver> <property name = "ForceBigDecimals" value = "false" /> </javatyperesolver> <!-إنشاء كائن VO-> <!-<javamodelgenerator> يتم استخدام عناصر لتحديد الخصائص التي تم إنشاؤها بواسطة نماذج Java. يقوم مولد نموذج Java بإنشاء الجدول الذي يطابق فئة المفاتيح الأساسية ، وفئة السجلات ، وعينة الاستعلام للتأمل. هذا العنصر هو عنصر الطفل المطلوب <Context>. الخصائص المدعومة: بنية: يتم استخدام هذه الخاصية لتحديد ما إذا كان مولد MyBatis سيقوم بإنشاء مُنشئ فئة ، يقبل كل حقل في فئة قيمة. وفي الوقت نفسه ، سيتم دمج خرائط نتائج SQL في كل حقل باستخدام مُنشئ بدلاً من "Setter". هذه الخاصية تنطبق فقط على mybatis3 وسيتم تجاهلها لـ iBatis2. القيمة الافتراضية خاطئة. غير قابل للتغيير: يتم استخدام هذه الخاصية ، يتم استخدام هذه الخاصية لتحديد ما إذا كان مولد MyBatis سيولد فئة نموذجية غير قابلة للتغيير - وهذا يعني أن الفصل لن يكون له طريقة "Setter" وسيقبل المنشئ قيمة كل حقل في الفصل. الافتراضي كاذب. TrimStrings: يتم استخدام هذه الخاصية لتحديد ما إذا كان مولد MyBatis يضيف رمزًا لتقليص المساحة الفارغة التي يتم إرجاعها من قاعدة البيانات. هذا مفيد إذا تخزن قاعدة البيانات الخاصة بك البيانات في حقل حرف بدلاً من حقل Varchar. سيقوم مولد MyBatis بإدراج رمز لقطع حقول الأحرف. القيمة الافتراضية خاطئة. -> <!-قم بإنشاء اسم الحزمة وموقع فئة الكيان. هنا ، ضع فئة الكيان التي تم إنشاؤها ضمن الحزمة com.ouc.model-> <JavamodElgenerator TargetPackage = "com.ouc.model" targetProject = "d:/javaproject/generator/src"> <spertary name = "enlabesUBPackages" value = "true"/> <property name = رسم خرائط للاستعلام-> <!-قم بإنشاء اسم الحزمة وموقع ملف خريطة SQL الذي تم إنشاؤه. هنا ، ضع ملف MAP SQL الذي تم إنشاؤه ضمن الحزمة com.ouc.mapping-> <sqlmapgenerator targetpackage = "com.ouc.mapping" targetproject = "d:/javaproject/generator/src"> <superation name = "enlabesUBPackages" value = "true"/> </sqlmaperatorator. javaclientgenerator> العناصر هي سمات تستخدم لتحديد مولدات رمز عميل Java. يتم استخدام مولد عميل Java لإنشاء واجهات Java والفئات بحيث يمكن استخدام نموذج Java المولد وملفات رسم الخرائط XML بسهولة. بالنسبة للبيئة المستهدفة لـ IBATIS2 ، تعتمد هذه الكائنات التي تم إنشاؤها على شكل واجهة DAO وفئات التنفيذ. بالنسبة لـ MyBatis ، يستخدم الكائن الذي تم إنشاؤه واجهة Mapper. هذا العنصر هو عنصر طفل اختياري. إذا لم تحدد هذا العنصر ، فلن يقوم مولد MyBatis (MBG) بإنشاء واجهات وفئات عميل Java. حيث نوع السمة: إذا كان TargetRuntime هو mybatis3 xmlmapper: سيقوم الكائن الذي تم إنشاؤه بتوزيع واجهة Java إلى البنية التحتية MyBatis 3.x. تعتمد الواجهة على ملف Mapper الذي تم إنشاؤه. بشكل عام ، يتم استخدام XMLMapper هذا. -> <!-قم بإنشاء اسم الحزمة وموقع DAO. هنا ، يتم وضع فئة DAO التي تم إنشاؤها تحت حزمة com.ouc.dao-> <javaclientgenerator type = "xmlmapper" targetpackage = "com.ouc.dao" targetproject = "d:/javaproject/generator/src لتحديد جدول في قاعدة البيانات. سيؤدي الجدول المحدد إلى إنشاء الكائنات التالية لكل جدول: • mybatis/ibatis • ملف تعيين SQL المنسق • مجموعة من الفئات التي تشكل جدول "النموذج" بما في ذلك: • فئة لمطابقة • المفتاح الأساسي للجدول (إذا كان للجدول مفتاح أساسي). • تتطابق الحقول في الجدول في المفتاح الأساسي ، وليس في حقل Blob. سيقوم هذا الفصل بتمديد المفتاح الأساسي إذا كان هناك واحد. • فئة لعقد حقل Blob في أي جدول (إن وجد). ستقوم هذه الفئة بتمديد الفئتين الأولين من واحد اعتمادًا على تكوين الجدول. • فئة ، تستخدم لإنشاء ديناميكية حيث الجمل ، في طرق مختلفة "بالمثال" (SelectByexample ، deletebyexample). • (اختياري) واجهة DAO و Class TableName: يجب تكوين اسم الجدول المحدد. DomainObjectName: الاسم الأساسي لكائن Javabean الذي تم إنشاؤه. إذا لم يتم تحديدها ، سيتم إنشاء MBG تلقائيًا بناءً على اسم الجدول. سيتم استخدام هذا الاسم (سواء تم تحديده هنا ، أو تم إنشاؤه تلقائيًا) كاسم فئة المجال واسم فئة DAO. EnableInsert: ما إذا كان لإنشاء عبارة إدراج. الافتراضي هو TRUE TELISEXELECTBYPRIMAYKEY: ما إذا كان يجب إنشاء بيان اختيار من خلال المفتاح الأساسي. بغض النظر عما إذا كان هناك مثل هذا الإعداد ، إذا لم يكن للجدول مفتاحًا أساسيًا ، فلن يتم إنشاءه. enableupDateByPrimaryKey: ما إذا كان يجب إنشاء عبارات تحديث من خلال المفتاح الأساسي. إذا لم يكن للجدول مفتاحًا أساسيًا ، فلن يتم إنشاء البيان بغض النظر عما إذا كان العقار قد تم تعيينه أم لا. EnupplyEteLeteByPrimaryKey: ما إذا كان يجب إنشاء بيان حذف من خلال المفتاح الأساسي. إذا لم يكن للجدول مفتاحًا أساسيًا ، بغض النظر عن تعيين هذه الخاصية ، فلن يتم إنشاء البيان. EnupplyEleteByExample: ما إذا كان يجب إنشاء عبارة حذف من خلال كائن المثال. يجعل هذا الإعلان العديد من عمليات الحذف الديناميكية المختلفة التي تم إنشاؤها في وقت التشغيل. EnableCountByexample: ما إذا كان يجب إنشاء عبارة لحساب عدد الصفوف من خلال كائن المثال. يعيد هذا البيان مثالاً يطابق عدد الصفوف في الجدول. enableupDateByExample: ما إذا كان يجب إنشاء عبارات تحديث من خلال كائن المثال. سيقوم هذا البيان بتحديث سجل مطابق في جدول. SelectByPrimaryKeyKeeryid: سيتم إضافة هذه القيمة إلى قائمة التحديد لتحديد الإعلان بواسطة المفتاح الأساسي في هذا الجدول: "'<SALET> as QueryID". يمكن استخدام هذا لتحديد الاستعلامات في DBA في أداة تتبع وقت التشغيل. إذا كنت بحاجة إلى استخدام ، فيجب عليك تحديد معرف فريد لإنشاء MBG لكل استعلام مختلف. SelectByExampleQueryID: سيتم إضافة هذه القيمة إلى قائمة التحديد لتحديد العبارة من خلال المثال في هذا الجدول: "<SALET> كـ QUERYID". يمكن استخدام هذا لتحديد الاستعلامات في DBA في أداة تتبع وقت التشغيل. إذا كنت بحاجة إلى استخدام ، فيجب عليك تحديد معرف فريد لإنشاء MBG لكل استعلام مختلف. EnlobyEctByExample: هل يجب إنشاء عبارة التحديد من خلال المثال؟ يجعل هذا الإعلان العديد من الاستعلامات الديناميكية المختلفة التي تم إنشاؤها في وقت التشغيل. ModelType: يتم استخدام هذه الخاصية لتجاوز نوع النموذج الافتراضي إذا كنت تريد القيام بذلك لهذا الجدول. إذا لم يتم تحديدها ، ستقوم MBG بإنشاء كائن المجال استنادًا إلى نوع النموذج الافتراضي للسياق. يحدد نوع النموذج كيفية إنشاء فئة مجال MBG. ستنشئ بعض أنواع النماذج MBGs فئة مجال واحد لكل جدول ، والبعض الآخر قد يولد فئات مختلفة MBGs اعتمادًا على بنية الجدول. escapewildcards: استبعاد أحرف البرية. هذا يعني أنه يجب تجنب كل من المخططات والجدول الأسماء الخاصة بـ SQL Wildcards ('_' و '٪') في أعمدة البحث. هذه هي بعض برامج التشغيل التي تتطلب أنه إذا كان المخطط أو الجدول يحتوي على بطاقة SQL Wildcard (على سبيل المثال ، إذا كان اسم الجدول my_table ، فإن بعض السائقين يتطلبون هروب الأحرف السفلية). -> <!-لإنشاء هذه الجداول (تغيير اسم tablenoBjectName)-> <table tablename = "v_supplyuser" domainObjectName = "vsupplyuser" enableCountByexample = "false" tablename = "wj_gatelist" domainObjectName = "wjgatelist" enableCountByExample = "false" enableupDatebyExample = "false" enableleexample = "false" enbleselectbyexample = "false" selectByQuarleD = "false"/> </context> افتح سطر الأوامر CMD ، انتقل إلى الملف الذي يوجد فيه ملف التكوين ، وتنفيذ عبارة الجيل التالي:
java -jar mybatis -generator -core -1.3.2.jar -Configfile generator.xml -overwrite
بعد تنفيذ الأمر ، يمكنك أن ترى أن حزمة DAO وحزمة النماذج وملفات حزمة MAPPER يتم إنشاؤها في المسار المقابل.
2.MyBatis تكامل إطار العمل
1) يستخدم MyBatis تكوين المعلمة: sqlmapconfig.xml.
① تكوين ذاكرة التخزين المؤقت (ذاكرة التخزين المؤقت): Cacheenabled: Global Switch: الافتراضي صحيح. إذا تم تكوينه كخطأ ، فمن غير المجدي تكوين ملفات XML Mapper الأخرى لدعم ذاكرة التخزين المؤقت.
② تأخير التحميل:
LazyLoadingEnabled: يستخدم True التحميل الكسول ، والتعطيل الكاذب ، التحميل الكسول ، الافتراضي صحيح ، عند تعطيله ، سيتم تحميل جميع الكائنات المرتبطة على الفور.
عندما يتم تمكين Aggressivelazyloading: TRUE ، عند الوصول إلى خاصية كائن كسول في الكائن عند تمكين التحميل كسول ، سيتم تحميل جميع خصائص الكائن البطيئة لهذا الكائن بالكامل. خطأ شنيع. عند تحميل التأخير ، قم بتحميل خصائص الكائن حسب الحاجة (أي الوصول إلى خاصية كائن كسول في الكائن ، وخصائص كائن كسول أخرى في الكائن لن يتم تحميلها). الافتراضي صحيح.
③ MultiplerSultSetSetSetAbled: السماح ولا تسمح لبيان واحد بإرجاع مجموعات بيانات متعددة (اعتمادًا على متطلبات برنامج التشغيل). الافتراضي صحيح.
④ USECOLURNINGLABEL: استخدم ملصقات الأعمدة بدلاً من أسماء الأعمدة. محركات الأقراص المختلفة لها طرق مختلفة. ارجع إلى وثائق محرك الأقراص أو اختبرها مع هذين الخيارين المختلفين.
⑤ usegeneratedkys: يسمح JDBC بإنشاء مفاتيح أساسية. مطلوب دعم محرك الأقراص. إذا تم تعيين هذا الإعداد ، فسيؤدي هذا الإعداد إلى إجبار المفتاح الأساسي الذي تم إنشاؤه على ذلك ، فإن بعض محركات الأقراص غير متوافقة ولكن لا يزال من الممكن تنفيذها.
⑥ AutomappingBehavior: يحدد ما إذا كانت MyBatis تلقائيًا تقوم بتخطيط حقول جدول البيانات وخصائص الكائنات. الجزئي سوف فقط خريطة تلقائيا بسيطة ، دون نتائج متداخلة. سوف تلقائيا تعيين تلقائيا جميع النتائج المعقدة.
⑦ DefaultExecutortype: يقوم بتكوين وتعيين المنفذ ، ويقوم المنفذ البسيط بتنفيذ بيانات أخرى. يجوز لـ Reuse Executor إعادة استخدام بيانات البيانات المعدة ، وقد يقوم المنفذ الدُفعات بتنفيذ البيانات وتحديثات الدُفعات بشكل متكرر.
⑧ DefaultStateMentTimeOut: قم بتعيين حد زمني لتحديد المدة التي ينتظر فيها محرك الأقراص حتى يستجيب قاعدة البيانات إلى المهلة.
ملف تكوين sqlmapconfig.xml الكامل هو كما يلي:
<؟ /> <setting name = "lazyloadingEnabled" value = "true" /> <setting name = "multiplerSultSetSEnsable" value = "true" /> <setting name = "multiplerSultSetSEnsable" value = "true" /> <setting name = "useColumbel" value = "true" value = "partial" /> <setting name = "defaultexecutortype" value = "simple" /> <!-simple reuse batch-> <!-<setting name = "defaultexecutortype" value = "batch" />-> <setting name = "defaultStatementTimeout" value = " name = "mapunderscoretocamelcase" value = "false" /> <setting name = "localcachescope" value = "session" /> <!-<setting name = "jdbctypefornull" value = "other" />-> <setting name = "jdbctypefornull" value = "null" /> value = "equals ، clone ، hashcode ، toString"/> </settings> <typealiases> <!-الوحدة النمطية-> <typealias alias = "user" type = "com.ouc.mkhl.platform.authority.model.user"/> <typealias alias = "rom" type = "com.ouc.mkhl.platform.authority.model.role"/> <typealias alias = "giper" type = "com.ouc.mkhl.platform.basedata.model.equipment"/> <Tytalias alias = "factory" type = "com.ouc.mkhl.platform.basedata.model.factory"/> </typealiases> <typeHandlers> <typeHandler Handler = "com.ouc.openplatform.dao.mybatis.serializableTypeHandler"/> </typehandlers> </configuration
التسلسل معالجة القيمة الخاصة: SerializableTypeHandler
package com.ouc.openplatform.dao.mybatis ؛ استيراد java.io.serializable ؛ استيراد java.sql.callablestatement ؛ استيراد java.sql.preparedstatement org.apache.ibatis.type.jdbctype ؛/*** author wuping*/public class serializableTypeHandler تمديد basetypeHandler <Serializable> {ps.setObject (i ، parameter) ؛}@outridepublic serializable getNullableresult (resultset rs ، string columnname) يلقي sqlexception {return (serializable) rs.GetObject (serializable) rs.getObject (columnIndex) ؛}@@overridepublic serializable getNullableresult (callablestatement cs ، int columnIndex) يلقي sqlexception {return (serializable) cs.getObject 2) مجموعة نتائج النتيجة:
عند تحديد رسم الخرائط في MyBatis ، يمكن استخدام نوع الإرجاع مع ResultType أو ResultMap. تمثل ResultType مباشرة نوع الإرجاع ، في حين أن ResultMap هي إشارة إلى النتيجة الخارجية ، ولكن لا يمكن وجود ResultType و ResultMap في نفس الوقت. عندما يقوم MyBatis بالاستعلام عن التعيين ، في الواقع ، يتم وضع كل استعلام سمة في خريطة مقابلة ، حيث يكون المفتاح هو اسم السمة والقيمة هي قيمتها المقابلة. عندما تكون سمة نوع الإرجاع المتوفرة هي resultType ، ستأخذ MyBatis أزواج القيمة الرئيسية في الخريطة وتعيينها إلى السمات المقابلة للكائن المحدد بواسطة ResultType. لذلك في الواقع ، فإن نوع العودة لكل خريطة استعلام لـ MyBatis هو نتيجة. ومع ذلك ، عندما تكون سمة نوع الإرجاع التي نقدمها هي resultType ، يقوم MyBatis تلقائيًا بتعيين القيمة المقابلة إلى سمات الكائن المحدد بواسطة ResultType. عندما يكون نوع الإرجاع الذي نقدمه هو resultmap ، لأن الخريطة لا يمكن أن تمثل نموذج المجال جيدًا ، نحتاج إلى تحويله إلى كائن مقابل لأنفسنا ، والذي غالبًا ما يكون مفيدًا للغاية في الاستعلامات المعقدة.
مثال: userbaseresultmap
<resultmap id = "userBaseresultMap" type = "user"> <id column = "id" property = "id" jdbctype = "integer" /> <result column = "username" property = "username" jdbctype = "varchar jdbctype = "varchar" /> <result column = "truEname" property = "truename" jdbctype = "varchar" /> <result column = "sex" property = "sex" jdbctype = "varchar" /> < /resultMap>
فئة النموذج: المستخدم
Package com.ouc.mkhl.platform.authority.model ؛ استيراد java.io.serializable ؛ // معلومات المستخدم الفئة العامة ينفذ تسلسل {private static final long serialversionuid = 1098321123l ؛ معرف عدد صحيح خاص ؛ // معرف المستخدم اسم المستخدم الخاص بالسلسلة الخاصة ؛ // اسم المستخدم كلمة مرور السلسلة الخاصة ؛ // اسم المستخدم سلسلة البريد الإلكتروني الخاصة ؛ // البريد الإلكتروني truename سلسلة خاصة ؛ // اسم حقيقي سلسلة الجنس سلسلة. // جنس العصر العدد الخاص ؛ // Age Private String Telephone ؛ // الهاتف المحمول integer getId () {return id ؛ } public void setId (integer id) {this.id = id ؛ } السلسلة العامة getUserName () {return username ؛ } public void setusername (string username) {this.username = username == null؟ null: username.trim () ؛ } السلسلة العامة getPassword () {return password ؛ } public void setPassword (سلسلة كلمة مرور) {this.password = password == null؟ null: password.trim () ؛ } السلسلة العامة getEmail () {return email ؛ } setemail public void (سلسلة البريد الإلكتروني) {this.email = email == null؟ NULL: email.trim () ؛ } السلسلة العامة getTruEname () {return truEname ؛ } public void setTruEname (سلسلة truename) {this.truEname = truEname == null؟ null: truename.trim () ؛ } سلسلة عامة getSex () {return sex ؛ } public void setSex (سلسلة الجنس) {this.sex = sex == null؟ null: sex.trim () ؛ } integer getAge () {return Age ؛ } public void setage (integer age) {this.age = age ؛ } السلسلة العامة getTelephone () {return telephone ؛ } public void settelephone (سلسلة الهاتف) {this.telephone = telephone == null؟ NULL: Telephone.trim () ؛ }} 3) إضافة وحذف وتعديل وتحقق من:
(1) حدد استعلام:
① ID: يمكن الرجوع إلى المعرف الفريد في هذا الوضع بواسطة بيانات أخرى.
② ParameterType: تم نقل اسم الفئة الكاملة أو الاسم المستعار للمعلمة إلى هذا البيان.
③ ResultType: يقوم البيان بإرجاع اسم الفئة بأكمله أو الاسم المستعار لنوع القيمة. لاحظ أنه إذا كانت مجموعة ، فسيتم ملء اسم الفصل أو الاسم المستعار للعنصر في المجموعة هنا ، بدلاً من اسم الفصل للمجموعة نفسها. (لا يمكن استخدام ResultType و ResultMap معًا)
④ ResultMap: اسم النتيجة الخارجية المشار إليها. تعيين مجموعة النتائج هو أقوى ميزة في MyBatis. يمكن حل العديد من التعيينات المعقدة بسهولة. (لا يمكن استخدام ResultType و ResultMap معًا)
⑤ FlushCache: إذا تم ضبطها على True ، فسيتم مسح ذاكرة التخزين المؤقت في كل مرة يتم فيها استدعاء البيان. تم تعيين عبارة SELECT على FALSE بشكل افتراضي.
⑥ Usecache: إذا تم ضبطها على True ، فسيتم تخزين مجموعة النتائج من البيان. تم تعيين عبارة SELECT على FALSE بشكل افتراضي.
⑦ المهلة: اضبط الحد الأقصى للوقت الذي ينتظر فيه محرك الأقراص استجابة قبل إلقاء استثناء. الافتراضي هو عدم تعيين القيمة ، ويقرر محرك الأقراص نفسها.
مثال: الاستعلام عن جميع معلومات المستخدم: SelectUsers
<حدد ID = "SelectUsers" resultmap = "userBaseresultMap"> حدد معرف ، اسم المستخدم ، البريد الإلكتروني من المستخدم </select>
(2) إدراج إدراج: SaveUser
هنا يستخدم جدول قاعدة البيانات المفتاح الأساسي لزيادة نفسه ، والمفتاح الأساسي هو المعرف.
① الجلب: بعد تعيين قيمة ، سيكون محرك الأقراص متحمسًا للعودة بعد أن يصل عدد مجموعات النتائج إلى هذه القيمة. لا يتم تعيين الافتراضي ، وهو ما يتم تحديده بواسطة محرك الأقراص نفسه.
② بيان: بيان ، بيان أعدت ، callablestateMent. عبارات معدّة ، بيانات قابلة للاستدعاء.
③ usegeneratedkeys: استخدم طريقة getGeneratedKeys من JDBC للحصول على المفتاح الأساسي الذي تم إنشاؤه بواسطة قاعدة البيانات نفسها (MySQL و SQLServer وقواعد البيانات العلائقية الأخرى سيكون لها حقول يتم إنشاؤها تلقائيًا).
④ KeyProperty: يحدد القيمة التي يتم إرجاعها بواسطة المفتاح الذي سيتم تعيينه في getGeneratedKeys بواسطة MyBatis ، أو استخدام عنصر SelecteKey Child لبيان الإدراج.
<insert id = "saveUser" parametertype = "user"> insert في المستخدم (اسم المستخدم ، كلمة المرور ، البريد الإلكتروني ، truename ، الجنس ، العمر ، الهاتف) القيم ( #{username ، jdbctype = varchar} ، #{password ، #{truename ، jdbctype = varchar} ، #{sex ، jdbctype = varchar} ، #{age ، jdbctype = integer} ، #{telephone ، jdbctype = varchar}) </insert> (3) تحديث التحديث: تحديث ديناميكي SQL: UpdateUser
<update id = "updateUser" parametertype = "user"> تحديث المستخدم <set> <if test = "username! = null"> username = #{username ، jdbctype = varchar} ، <///إذا test = "test =" password! #{البريد الإلكتروني ، jdbctype = varchar} ، </if> <if test = "truEname! = null"> truEname = #{truEname ، jdbctype = varchar} ، </if> <test = "sex! = null" #{Age ، jdbctype = integer} ، </if> <if test = "tephone! = null"> telephone = #{telephone ، jdbctype = varchar} ، </if> </st> حيث id = #{id ، jdbctype = integer} </update> (4) حذف الحذف: حذف
<delete id = "deleteuser" parametertype = "integer"> delete من userwhere id = #{id ، jdbctype = integer} </delete> (5) SQL: يتم استخدام عنصر SQL لتحديد شريحة بيان SQL قابلة لإعادة الاستخدام لتصريحات أخرى للاتصال.
<sql id = "userBaseColumnList"> اسم المستخدم ، كلمة المرور ، البريد الإلكتروني ، الهاتف </sql> <حدد ID = "getUsers" resultMap = "userBaserEsultMap"> حدد <suptue refid = "userBaseColumnList"/> من المستخدم </select>
(6) المعلمات: المعلمات: يمكن لـ MyBatis استخدام أنواع البيانات الأساسية وأنواع البيانات المعقدة في Java.
أنواع البيانات الأساسية ، السلسلة ، int ، التاريخ ، إلخ.
يمكن أن يؤدي استخدام أنواع البيانات الأساسية إلى توفير معلمة واحدة فقط ، لذلك تحتاج إلى استخدام فئة Java Entity أو نوع الخريطة كنوع المعلمة. يمكن الحصول على سماتها مباشرة من خلال #{}.
① معلمات نوع البيانات الأساسية: سلسلة
<حدد ID = "getUserByName" resultType = "user" parametertype = "string"> حدد معرف ، اسم المستخدم ، البريد الإلكتروني من userwhere username = #{username ، jdbctype = varchar} </select> كود جافا:
المستخدم العام getUserByName (اسم السلسلة) ؛ // احصل على معلومات المستخدم بناءً على اسم المستخدم
② جافا نوع الكيان المعلمة: المستخدم
<insert id = "saveUser" parametertype = "user"> insert في المستخدم (اسم المستخدم ، كلمة المرور ، البريد الإلكتروني ، truename ، الجنس ، العمر ، الهاتف) القيم ( #{username ، jdbctype = varchar} ، #{password ، #{truename ، jdbctype = varchar} ، #{sex ، jdbctype = varchar} ، #{age ، jdbctype = integer} ، #{telephone ، jdbctype = varchar}) </insert> كود جافا:
Public Int SaveUser (مستخدم المستخدم) ؛ // أدخل معلومات المستخدم
③ معلمات الخريطة: خريطة <سلسلة ، كائن> recordmap
<select id = "selectChildGroUptOtalNum" resultType = "Integer"> حدد العد (*) من groupInfo <trim prepix = "where" prefixOverRides = "و | أو"> و id في <foreach collection = "idstr name! = '' '"> و name kear concat (concat (' ٪ '، #{name}) ،' ٪ ') </if> <if test =" description! = null and description! =' '"> و description like concat (' ٪ '، #{description}) ،' ٪ ') #{type ، jdbctype = integer} </if> <if test = "category! = null and category! =-1"> and catexor كود جافا:
// احصل على إجمالي عدد السجلات في المجموعات الفرعية العامة int selectchildgrouptoTalNum (خريطة <سلسلة ، كائن> recordmap) ؛ خريطة <سلسلة ، كائن> recordmap = new hashmap <string ، object> () ؛ recordmap.put ("idstr" ، group.getChildGroupids (). split ("،")) ؛ recordmap.put ("name" ، name) ؛ recordmap.put ("description" ، description) ؛ GroupDao.SelectChildGrouptalNum (RecordMap) ؛ ④ معلمات متعددة:
الطريقة 1: تمرير المعلمات بالترتيب.
<!-معلمات الاستعلام استنادًا إلى اسم المعلمة-> <حدد ID = "SelectSensorNoBySensorname" resultType = "Integer" usecache = "false" flushcache = "true"> حدد sensorno من sensorConfig حيث name = #{0} و testunitno = #{1} و labcode = #} كود جافا:
// Query المعلمة idpublic int selectSensornobysensorname (String sensorname ، int testunitno ، string labcode) ؛
الطريقة 2: إضافة التعليق التوضيحي param إلى معلمات الواجهة.
<ed select id = "selectByUserNameAndVcode" resultMap = "userBaserEsultMap"> SELECT ID ، اسم المستخدم من المستخدم <trim prefix = "حيث" prefixoverrides = "و | أو"> <> <username! = null و username! = '' test = "supplierno! = null and supplierno! = ''"> و supplierNo مثل concat (concat ('٪' ، #{supplierno}) ، '٪') </if> و supplierno! = 'test' </rim> limit #{startIndex} ، #{pagesize} </select> كود جافا:
// معلومات مستخدم الاستعلام استنادًا إلى اسم المستخدم وقائمة الكود العامة <user> selectByuserNameAndVcode (param ("username") username username ،@param ("supplierno") سلسلة الموردين ،@param ("startIndex") int startIndex ، param ( 4) بيان SQL الديناميكي:
حدد علامة ، إذا كانت العلامة ، الحكم الشرطي لـ if + أين ، قم بتحديث بيان if + set ، if + trim يستبدل مكان/تعيين العلامة ، قم باستبدال set ، اختر (عندما ، خلاف ذلك) ، علامة foreach. تعد عبارات SQL الديناميكية الجزء الأكثر مرونة من MyBatis ، وهي مريحة للغاية لاستخدامها بشكل جيد.
مثال: selectToTalNumbyAccountType
<SELECT ID = "selectTOtalNumByActtype" resultType = "Integer"> حدد العد (*) من المستخدم <trim prefix = "حيث" precioverRides = "و | أو"> و id not في <foreach collection = "idstr اسم المستخدم! = '' "> واسم المستخدم مثل concat (concat ('٪' ، #{username}) ، '٪') </if> <if test =" supplierno! = null and supplierno! = '' "> و supplierno مثل concat ('٪' ، #{plierno}) ، '٪') truEname! = '' "> و truename مثل concat (concat ('٪' ، #{truename}) ، '٪') </If> و accountType = #{accountType} </rev> </select>ما سبق هو ملخص لمعرفة استخدام إطار الطبقة المستمرة MyBatis التي قدمها لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!