بالنسبة لأولئك الذين ليسوا واضحين جدًا حول أساسيات MyBatis ، يرجى الرجوع إلى هذا المقال: MyBatis Indistruction التعلم التعليمي (I) - مقدمة MyBatis السريعة.
قابل MyBatis
MyBatis هو مشروع مفتوح المصدر من Apache. في عام 2010 ، تم نقل هذا المشروع من مؤسسة Apache Software Foundation إلى Google Code وتم إعادة تسمية MyBatis. هاجر إلى جيثب في نوفمبر 2013.
يأتي مصطلح Ibatis من مزيج من "الإنترنت" و "Abatis" ، وهو إطار طبقة الثبات القائم على Java. يوفر Ibatis أطر طبقة الثبات بما في ذلك خرائط SQL وكائنات الوصول إلى البيانات (DAO)
ألبوم صورة MyBatis
مقدمة
ذكرت الاستعلام البسيط لقاعدة البيانات والاستعلام الإداري من قبل. هناك بعض تطوير الطلب الفردي ، واحد إلى كثير والعديد من الطلبات في متطلبات التنمية. على سبيل المثال ، عند تطوير عربات التسوق ، يكون الطلبات والمستخدمون فرديًا ، والمستخدمين والطلبات من شخص واحد ، والمستخدمين والمنتجات كثيرون. هذه هي أيضا شائعة في تنمية السبات. يتم تنفيذها من خلال تعيين البيانات في السبات ، وفي MyBatis ، يتم تنفيذها من خلال تعيين البيانات في ملفات التكوين.
استفسار فردي
إذا كنا نريد الاستعلام عن معلومات الطلب وربط معلومات المستخدم لإنشاء الطلبات ، فهذا استعلام نموذجي واحد إلى واحد. هناك طريقتان لتنفيذ استعلام فردي: استخدم ResultType و ResultMap. تتطلب ResultType تعريف POJO إضافي ، ثم تتوافق حقول الاستعلام مع Pojo المحددة حديثًا واحدًا تلو الآخر. تحتاج ResultMap إلى تنفيذ ارتباط فردي بين اثنين من pojos من خلال ملفات التكوين. دعونا ننفذ هاتين الطريقتين بشكل منفصل أدناه.
النتيجة:
1. قم بإنشاء pojo وأضف السمات الجديدة التي يجب تعيينها إلى Pojo الجديد.
يمتد OrderCustom للطبقة العامة الطلبات {// إضافة معلومات المستخدم الخاصة بالسلسلة الخاصة ؛ جنسية سلسلة خاصة عنوان السلسلة الخاص ؛ السلسلة العامة getUserName () {return username ؛ } public void setusername (string username) {this.userName = username ؛ } سلسلة عامة getSex () {return sex ؛ } public void setSex (سلسلة الجنس) {this.sex = sex ؛ } السلسلة العامة getAddress () {return address ؛ } public void setAddress (عنوان السلسلة) {this.address = العنوان ؛ }}2. ملف التعيين:
<select id = "findOrderUser" resultType = "com.luchao.mybatis.first.po.ordercustom"> حدد الطلبات.*، user.username ، user.sex ، user.address من الطلبات ، user where orders.user_id = user.id </select>
3. تنفيذ واجهة Mapper:
// طلب الاستعلام ومعلومات المستخدم القائمة العامة <SrideCustom> FindOrderUser () يلقي الاستثناء ؛
4. رمز الاختبار:
public void findordersuser () يلقي الاستثناء {// الحصول على كائن sqlsession sqlsession sqlsession = sqlsessionfactory.opensession () ؛ // إنشاء كائن OrderMapper ، يقوم MyBatis تلقائيًا بإنشاء الوكيل mapper ordermapper ordermapper = sqlsession.getMapper (ordermapper.class) ؛ . system.out.println (ordercustoms.size ()) ؛ }تنفيذ ResultMap:
يقوم ResultMap بتعيين معلومات الطلب في نتيجة الاستعلام إلى كائن الطلبات ، ويضيف سمة المستخدم في فئة الطلبات ، ويقوم بتخطيط معلومات مستخدم الاستعلام المرتبطة به إلى سمة المستخدم في كائن الطلبات.
1. إنشاء pojo وأضف سمة المستخدم إلى فئة الطلب.
أوامر الفئة العامة {معرف عدد صحيح خاص ؛ userId عدد صحيح خاص ؛ رقم السلسلة الخاص ؛ تاريخ خاص CreateTime ؛ مذكرة سلسلة خاصة // معلومات المستخدم المستخدم الخاص المستخدم ؛ // order Entry List Private List <DressDetail> orderDetails ؛ عدد صحيح عام getId () {معرف الإرجاع ؛ } public void setId (integer id) {this.id = id ؛ } integer getUserId () {return userId ؛ } public void setUserId (integer userId) {this.userId = userId ؛ } السلسلة العامة getNumber () {رقم الإرجاع ؛ } public void setNumber (رقم السلسلة) {this.number = number == null؟ null: number.trim () ؛ } التاريخ العام getCreateTime () {return createTime ؛ } public void setCreateTime (DateTeTime) {this.createTime = createTime ؛ } السلسلة العامة getNote () {note return ؛ } public void setNote (note string) {this.note = note == null؟ null: note.trim () ؛ } المستخدم العام getUser () {return user ؛ } public void setUser (user user) {this.user = user ؛ } القائمة العامة <DressDetail> getorderDetails () {return orderdetails ؛ } public void setOrderDetails (list <DressDetail> orderDetails) {this.orderDetails = OrderDetails ؛ }}2. ملف التعيين:
<!-اطلب الاستعلام عن نتائج المستخدم المرتبط ، قم بتخطيط نتيجة الاستعلام بأكملها إلى الطلبات-> <resultMap type = "com.luchao.mybatis.first.po.orders" id = "ordersuserresultmap"> <sureded = "property =". column = "createTime" property = "createTime" /> <result column = "note" property = "note" /> <!-تكوين معلومات المستخدم المرتبطة بها من التعيين-> <!-الجمعية: تستخدم لتخطيط المعلومات للحصول على خاصية كائن واحد من الاستعلام: أي خاصية في الطلبات. <!-معرف: معرف فريد من نوعه لعمود مستخدم الاستعلام المرتبط: حدد العمود الذي يحدد بشكل فريد معلومات المستخدم javatype: أي خاصية خريطة المستخدم إلى-> <id column = "user_id" property = "id" /> <result column = "username" property = "username" /> <result column = "sex" propert id = "findOrderUsermap" resultMap = "OrdersUsErresultMap"> حدد الطلبات.*، user.username ، user.sex ، user.address من الطلبات ، المستخدم حيث orders.user_id = user.id </select>
الجمعية: تستخدم لتعيين معلومات كائن واحد للاستعلام المرتبط ، الخاصية: أي خاصية في الطلبات لتعيين معلومات المستخدم الخاصة بالاستعلام المرتبط به.
3. واجهة Mapper
// طلب الاستعلام ومعلومات المستخدم من خلال قائمة ResultMap العامة <ReserS> FindOrderuserMap () يلقي الاستثناء ؛
4. رمز الاختبار:
public void findordersusermap () يلقي الاستثناء {// الحصول على كائن sqlsession sqlsession sqlsession = sqlsessionfactory.opensession () ؛ // إنشاء كائن OrderMapper ، يقوم MyBatis تلقائيًا بإنشاء OrderMapper OrderMapper mapper = sqlsession.getMapper (ordermapper.class) ؛ // استدعاء طريقة OrderMapper للاستعلام عن طلب المعلومات وقائمة معلومات المستخدم <ReserS> Orders = ordermapper.findorderusermap () ؛ system.out.println (orders.size ()) ؛ }تنفيذ ResultType و ResultMap لتنفيذ ملخص الاستعلام الفردي:
ResultType: من السهل نسبيًا تنفيذها باستخدام ResultType. إذا لم يتم تضمين اسم عمود الاستعلام في POJO ، فأنت بحاجة إلى إضافة السمات المقابلة لاسم العمود لإكمال التعيين. إذا لم تكن هناك متطلبات خاصة لنتائج الاستعلام ، فمن المستحسن استخدام ResultType.
ResultMap: يجب تحديد خريطة النتيجة بشكل منفصل ، وهو أمر مزعج بعض الشيء. إذا كانت هناك متطلبات خاصة لنتائج الاستعلام ، فإن استخدام ResultMap يمكنه إكمال سمات رسم خرائط الاستعلام المرتبط به. يمكن لـ ResultMap تطبيق التحميل البطيء ، لا يمكن لـ ResultType تنفيذ تحميل كسول.
استعلام واحد إلى الرجل
إذا كنت بحاجة إلى الاستعلام عن تفاصيل الطلب والطلب ، فهذا هو متطلبات الاستعلام الواحد.
1. Pojo هو نفس Pojo من الترتيب في النتيجة أعلاه. قم بتعيين تفاصيل الطلب لإدراج سمة الطلب.
2. ملف التعيين:
<!-خريطة للحصول على تفاصيل الطلب والطلب واستخدام المستخدم لا تحتاج إلى تكوين معلومات الطلب ومعلومات المستخدم-> <resultmap type = "com.luchao.mybatis.first.po.orders" id = "ordersorderDetailResultMap" extends = "ordersuserresultmap"> <sollectionderperation = "orderdetails" Oftype = "com.luchao.mybatis.first.po.orderDetail"> <result column = "orderdetail_id" property = "id" /> <result column = "items_id" property = "itemsid" /> <results column = "items_num" property = id = "findOrderandOrderDerDetailMap" resultMap = "OrdersOrderDetailResultMap"> حدد الطلبات.*، user.username ، user.sex ، user.address ، orderdetail.id orderdetail_id ، orderdetail.items_id ، orderdetail.items_nums_num. user.id و orderdetail.orders_id = orders.id </select>
يتم توريث نتيجة الطلبات وتفاصيل الطلب باستخدام تمديد ، وليس هناك حاجة لتكوين تعيين معلومات الطلب ومعلومات المستخدم.
المجموعة: قم بتخطيط سجلات متعددة إلى كائن المجموعة لاستعلام الجمعية ، الخاصية: قم بتخطيط سجلات متعددة إلى خاصية الطلبات.
Offype: يحدد النوع الذي يقوم بتعيين Pojo في سمة مجموعة القائمة. لاحظ أنه لا يزال هناك فرق بين النوع والآخر.
3. واجهة Mapper:
// استفسار الطلبات وتفاصيل الطلب ومعلومات المستخدم من خلال ResultMap
القائمة العامة <ReserS> FindOrderandorderDetailmap () يلقي الاستثناء ؛
4. رمز الاختبار:
public void findorderandorderDetailMap () يلقي الاستثناء {// الحصول على كائن sqlsession sqlsession sqlsession = sqlsessionfactory.opensession () ؛ // إنشاء كائن OrderMapper ، يقوم MyBatis تلقائيًا بإنشاء OrderMapper OrderMapper mapper = sqlsession.getMapper (ordermapper.class) ؛ // استدعاء طريقة ordermapper إلى طلب الاستعلام وقائمة معلومات المستخدم <ReserS> orders = ordermapper.findorderandorderDerDetailMap () ؛ system.out.println (orders.get (). getorderDetails (). size ()) ؛ system.out.println (orders.size ()) ؛ }ملخص واحد لرجال:
يستخدم MyBatis مجموعة ResultMap لتعيين سجلات متعددة للاستعلام المرتبط في خاصية مجموعة القائمة.
التنفيذ باستخدام resultType:
تحديد تفاصيل الطلب في OrderDetails في الطلبات ، تحتاج إلى التعامل معها بنفسك ، واستخدام حلقة مزدوجة لاجتياز السجلات المكررة ، ووضع تفاصيل الطلب في OrderDetails. سيكون هذا أكثر إثارة للقلق.
العديد من الرجال
إذا قمنا بالاستعلام عن معلومات المنتج للمستخدمين والمستخدمين ، فهذا كثير إلى كثير ، ويمكنك استخدام تعيين MyBatis العديد من العدد.
خريطة معلومات المستخدم في المستخدم. أضف قائمة سمات قائمة الطلبات <ReserS> orderslist في فئة المستخدم ، قم بتخطيط الطلب الذي أنشأه المستخدم إلى قائمة OrdersList ، وأضف قائمة سمات قائمة تفاصيل الطلبات <SrideDetail> orderdetials في الطلبات ، ورسم خريطة تفاصيل الطلب إلى orderdetials ، وإضافة سمة العناصر في orderdetail ، ورسم خريطة للعناصر المتوافقة مع تفاصيل الطلب إلى العناصر.
1. بوجو
الطبقة العامة OrderDetail {Private Integer ID ؛ عدد صحيح خاص العناصر العددية الخاصة ؛ العناصر العددية الخاصة ؛ // معلومات المنتج عناصر العناصر الخاصة ؛ عدد صحيح عام getId () {معرف الإرجاع ؛ } public void setId (integer id) {this.id = id ؛ } integer getordersid () {return ordersId ؛ } public void setordersid (integer ordersId) {this.ordersId = ordersId ؛ } integer getItemSid () {return headsid ؛ } public void setItemSid (integer headsid) {this.itemsid = headsId ؛ } integer getItemSnum () {return heatsnum ؛ } public void setItemSnum (integer headsnum) {this.itemsnum = headsNum ؛ } العناصر العامة getItems () {return stems ؛ } public void setItems (عناصر العناصر) {this.items = heads ؛ } Override public string toString () {return "orderDetail [id =" + id + "، ordersId =" + ordersId + "، headsid =" + headsid + "، headnum =" + headsnum + "] ؛ }}2. ملف التعيين:
<!-Quep user user and Carrated Products-> <resultmap type = "com.luchao.mybatis.first.po.user" id = "orderSiteMSresultMap"> <! property = "address" /> <!-طلب معلومات يتوافق المستخدم مع أوامر متعددة ، استخدم تعيين المجموعة-> <collection property = "orderslist" oftype = "com.luchao.mybatis.first.po.orders column = "createTime" property = "createTime" /> <result column = "note" property = "note" /> <!-تفاصيل الطلب يتضمن ترتيبًا واحدًا تفاصيل-> <collection property = "orderdetails" oftype = "com.luchao.mybatis.first.po.orderdetail column = "heads_num" property = "headsnum" /> <result column = "orders_id" property = "ordersId" /> <!-معلومات المنتج تتوافق تفاصيل أحد المنتجات-> <insivale property = "عناصر" javatype = "com.luchao.mybatis.first.po.items property = "name"/> <result column = "items_detail" property = "detail"/> <result column = "heads_price" property = "price"/> </sirection> </solde> </collection> </resultmap> <select id = "findOrderandItemMap" resultMap = orderdetail_id ، orderdetail.items_id ، orderdetail.items_num ، orderdetail.orders_id ، items.id heads_id ، items.name items_name ، items.detail items_detail ، items.price items_price from ormers ، user ، orderdetail ، iting where orders. orderdetail.items_id = items.id </rection>
يمكن أن نرى أن العديد من العدد هو في الأساس مزيج من شخص واحد وواحد إلى واحد. جميع المشكلات المعقدة هي في الأساس مجموعات من المشاكل البسيطة. طالما قمت بتحليلها بعناية ، يمكنك فهم المبادئ.
3. واجهة Mapper:
// طلب الاستعلام وتفاصيل الطلب ومعلومات المستخدم من خلال قائمة ResultMap العامة <Sether> FindOrderAndItemMap () يلقي الاستثناء ؛
4. رمز الاختبار:
public void findorderanditemmap () يلقي الاستثناء {// الحصول على كائن sqlsession sqlsession sqlsession = sqlsessionfactory.opensession () ؛ // إنشاء كائن OrderMapper ، يقوم MyBatis تلقائيًا بإنشاء OrderMapper OrderMapper mapper = sqlsession.getMapper (ordermapper.class) ؛ // استدعاء طريقة ordermapper للاستعلام عن طلب المستخدم وقائمة معلومات المستخدم <Sether> المستخدمين = ordermapper.findOrderandAndItemMap () ؛ System.out.println (user.get (). getorderslist (). get () .getorderDetails (). get (). getId ()) ؛ // system.out.println (orders.size ()) ؛ }ملخص استعلام كثير إلى العديد:
تستخدم المتطلبات أعلاه resultType لرسم خريطة للسجلات التي تم الاستعلام في POJO الموسعة ، وهو أمر سهل للغاية لتنفيذ وظيفة قائمة مفصلة ، ولكن هذا لا يمكن أن يحقق التحميل المتأخر. استخدم ResultMap لتعيين قائمة مفصلة من العناصر التي اشتراها المستخدمون إلى كائن ، مما يسمح بالتحميل الكسول. استخدام ResultMap هو لتلك الوظائف التي لها متطلبات خاصة لرسم خرائط نتائج الاستعلام ، مثل تعيين المتطلبات الخاصة في قوائم بما في ذلك قوائم متعددة.
ملخص النتيجة
1. resultType:
تأثير:
قم بتخطيط نتائج الاستعلام في POJO وفقًا لاسم سمة عمود SQL POJOWEST.
مناسبة:
العرض الشائع للسجلات التفصيلية ، مثل عندما يشتري المستخدمون تفاصيل المنتج وعرض جميع معلومات الاستعلام المرتبطة بالصفحة ، يمكنك استخدام ResultType مباشرة لتعيين كل سجل في pojo ، وتجارة القائمة (Pojo في القائمة) في الصفحة الأمامية.
2. ResultMap:
استخدم الجمعية والجمع لإكمال رسم الخرائط المتقدمة الفردية والفردية (هناك متطلبات تعيين خاصة للنتائج).
منظمة:
تأثير:
قم بتخطيط معلومات الاستعلام المرتبطة به في كائن Pojo.
مناسبة:
من أجل تسهيل الاستعلام عن المعلومات المرتبطة به ، يمكنك استخدام الارتباط لتعيين معلومات الطلب المرتبطة به في سمات POJO لكائنات المستخدم ، مثل: الاستعلام عن أوامر ومعلومات المستخدم المرتبطة بها.
لا يمكن باستخدام ResultType تعيين نتائج الاستعلام إلى سمة Pojo لكائن PoJo. اختر ما إذا كنت تريد استخدام ResultType أو ResultMap وفقًا لاحتياجات اجتياز استعلام مجموعة النتائج.
مجموعة:
تأثير:
قم بتخطيط معلومات الاستعلام المرتبطة به في مجموعة قائمة.
مناسبة:
من أجل تسهيل معلومات جمعية اجتياز الاستعلام ، يمكنك استخدام المجموعة لتعيين معلومات الجمعية إلى مجموعة القائمة. على سبيل المثال: الاستعلام عن وحدة نطاق إذن المستخدم والقائمة أسفل الوحدة النمطية ، يمكنك استخدام المجموعة لتعيين قائمة الوحدة النمطية لرسم خريطة لسمات قائمة القائمة لكائن الوحدة النمطية. والغرض من ذلك هو تسهيل اجتياز الاستعلام عن مجموعة نتائج الاستعلام.
إذا كنت تستخدم resultType ، لا يمكنك تعيين نتائج الاستعلام إلى مجموعة القائمة.
المحتوى أعلاه هو البرنامج التعليمي التعليمي MyBatis Advanced Mapping الذي قدمه لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كنت تريد معرفة المزيد ، فيرجى الانتباه إلى موقع Wulin.com!