تم إطلاق مشروع جديد في اليومين الماضيين لأن أعضاء فريق المشروع استخدموا دائمًا MyBatis. على الرغم من أنني شخصياً أفضل النموذج البسيط لـ JPA ، إلا أن MyBatis لا يزال مصمماً على الحفاظ على اختيار التكنولوجيا الموحدة من أجل الحفاظ على المشروع. ذهبت عبر الإنترنت للعثور على المعلومات ذات الصلة حول مزيج من SPRING BOOT و MYBATIS. هناك أشكال مختلفة ، مما يجعل الناس سئموا من قراءتها. الجمع بين التوضيح الرسمي والوثائق الرسمية لـ MyBatis ، وجدت أخيرًا أنيبين أبسط. قضيت يومًا في تلخيصه ومشاركته.
يتمثل جوهر إطار ORM في تبسيط ترميز قواعد بيانات التشغيل في البرمجة. الآن هناك شركتان في الأساس. أحدهما هو الادعاء بأنه لا يمكنك كتابة جملة من سبات SQL ، والآخر هو تصحيح MyBatis بشكل مرن من SQL الديناميكي. كلاهما لهما خصائصه الخاصة ويمكن استخدامه بمرونة وفقًا للاحتياجات في تطوير النظام على مستوى المؤسسة. لقد وجدت ظاهرة مثيرة للاهتمام: تحب معظم الشركات التقليدية استخدام السبات ، وعادة ما تستخدم صناعة الإنترنت MyBatis.
تتمثل خاصية السبات في أن جميع SQL يتم إنشاؤها باستخدام رمز Java ، وليس هناك حاجة للكتابة (قراءة) SQL دون القفز من البرنامج. لديها نزاهة البرمجة. يتطور إلى الجزء العلوي من النموذج. في الأساس ، يمكن إنشاء SQL المقابل بناءً على اسم الطريقة. إذا كنت لا تعرف الكثير ، فيمكنك قراءة مقالتي السابقة حول استخدام بيانات الربيع JPA.
يعد MyBatis مزعجًا للغاية في المرحلة المبكرة ، ويتطلب العديد من ملفات التكوين ، وفئات الكيانات ، وجمعيات رسم خرائط طبقة DAO ، والكثير من التكوينات الأخرى. بالطبع ، اكتشف MyBatis هذا العيب أيضًا. في المرحلة المبكرة ، تم تطوير المولد ، والذي يمكن أن ينتج تلقائيًا فئات الكيانات وملفات التكوين ورمز طبقة DAO استنادًا إلى نتائج الجدول ، والتي يمكن أن تقلل جزء من حجم التطوير ؛ في المرحلة اللاحقة ، يمكن استخدام الكثير من التحسينات لاستخدام التعليقات التوضيحية ، وإدارة طبقات DAO وملفات التكوين تلقائيًا ، وما إلى ذلك ، والتطوير إلى الأعلى هو النموذج الذي سنتحدث عنه اليوم. MyBatis-spring-boot-starter هو Springboot+MyBatis يمكنه التعليق تمامًا بدون ملفات التكوين ، ويمكن أن يكون أيضًا تكوينًا بسيطًا وسهل البدء.
الآن فكر في الأمر ، Fring Boot رائع. طالما أنك تربط أي شيء مع Spring Boot ، فإنه سيبسيطه.
Mybatis-spring-boot-starter
الوصف الرسمي: سيساعدك MyBatis Spring-Boot-Starter في استخدام MyBatis مع SPRING BOOT
في الواقع ، طورت MyBatis حلاً للانضمام إلى المرح بسبب Boot Spring شائع للغاية ، لكن هذه المشكلات قد حلت بالفعل العديد من المشكلات وهي في الواقع أكثر سلاسة للاستخدام. هناك حلان رئيسيان لـ MyBatis-Spring-Boot-Starter. أحدهما هو استخدام التعليقات التوضيحية لحل جميع المشكلات ، والآخر هو التقليد القديم المبسط.
بالطبع ، يحتاج أي وضع إلى تقديم ملف POM أولاً من MyBatis-Spring-Boot-Starter. الآن الإصدار الأخير هو 1.1.1 (يحدث فقط على مضاعفة 11 :))
<Rependency> <rouper> org.mybatis.spring.boot </groupId> <StifactId> mybatis-spring-boot-starter </stifactid> <الإصدار> 1.1.1 </version> </respency>
سأقدم نموذجين للتطوير
لا يوجد إصدار شرح لتوضيح ملف التكوين
يتم ذلك مع التعليقات التوضيحية.
1 إضافة ملفات Maven ذات الصلة
<ependencies> <Rependency> <roupiD> org.springframework.boot </groupId> <StifactId> spring-boot-starter </shintifactid> </redepency> <redenced> <roupiD> org.springframework.boot </rougeid> </attifactidid </rougiDid > اختبار spring-boot-starter </artifactid> <scope> اختبار </scope> </premidency> <reperency> <roupiD> org.springframework.boot </groupId> <StifactId> Spring-Boot-Starter-Web </stifactid> </expency> <depen dency> <roughid> org.mybatis.spring.boot </rougiD> <intifactid> mybatis-spring-boot-starter </stifactid> <sophy> 1.1.1 </version> </sperency> <sperency> <rouplencid> mysql </rougeid> mysql-c onnector-java </artifactid> </sependency> <reperency> <roupiD> org.springframework.boot </rougeid> <StifactId> spring-boot-devtools </artifactid> <cential> true </pericantal> </spensed> </تبعية>
لن أقوم بنشر حزمة POM الكاملة هنا ، يرجى قراءة رمز المصدر مباشرة
2. application.properties إضافة التكوينات ذات الصلة
mybatis.type-aliases-package = com.neo.entityspring.datasource.driverClassName = com.mysql.jdbc.driverspring.datasource.url = jdbc: mysql: // localhost: 3306/test1؟ useUnicode = rootspring.datasource.password = الجذر
سيتم تحميل Springboot تلقائيًا التكوين ذي الصلة لـ spring.datasource.*، وسيتم حقن مصدر البيانات تلقائيًا في SQLSessionFactory. سيتم حقن SQLSessionFactory تلقائيًا في Mapper. بالمناسبة ، لا داعي للقلق بشأن كل شيء ، ما عليك سوى استلامه واستخدامه.
إضافة فحص حزمة Mapper في فئة بدء التشغيل @MapperScan
@springbootapplication@mapperscan ("com.neo.mapper") تطبيق الفئة العامة {public static void main (string []أو فقط أضف التعليق التوضيحي mapper على فئة Mapper. يوصى باستخدام ما أعلاه ، وإلا سيكون من المزعج للغاية إضافة التعليق التوضيحي إلى كل خريطة.
3. تطوير Mapper
الخطوة الثالثة هي الجزء الأكثر أهمية ، وإنتاج SQL هنا
الواجهة العامة usermapper {select ("select * from user")@results ({@result (property = "usersex" ، column = "user_sex" ، javatype = userexenum.class) ،@result (select = "live in in yere =" ins yle = "column =" nick_name ")}). #{id} ")@results ({@result (property =" usersex "، column =" user_sex "، javatype = usersexenum.class) ،@result (property =" labename "، column =" nick_name ")}) userity getOne (id id) ؛ insert ( #{password} ،#{stervesex}) ") void insert (userentity user) ؛@update (من أجل أن أكون أقرب إلى الإنتاج ، قمت بتطوير خصيتين لسمتي user_sex و nick_name في قاعدة البيانات وأسماء سمات فئة الكيان غير متسقة. بالإضافة إلى ذلك ، يستخدم user_sex التعدادات
@SELECT عبارة عن شرح شرح لفئة الاستعلام ، وجميع الاستعلامات تستخدم هذا
Result تعديل مجموعة النتائج التي تم إرجاعها ، وتتوافق سمات فئة الكيان المرتبطة وحقول قاعدة البيانات واحدة تلو الأخرى. إذا كانت سمات فئة الكيان وأسماء سمات قاعدة البيانات متسقة ، فلن تكون هناك حاجة إلى تعديل هذه السمة.
insert أدخل قاعدة البيانات لاستخدامها ، سيقوم تمرير فئة الكيان مباشرة بتحليل السمة إلى القيمة المقابلة
update مسؤول عن التعديل ، ويمكن أيضًا نقله مباشرة إلى الكائن
Delete مسؤول عن حذف
لمزيد من الخصائص ، يرجى الرجوع إلى هنا: http://www.mybatis.org/mybatis-3/zh/java-api.html
لاحظ أن الفرق بين استخدام الرمز # ورمز $:
// ينشئ هذا المثال عبارة أعد ، شيء مثل SELECT * من المعلم where where name =؟ ؛@SELECT ( SelectTeachforgivenName (param ("name") اسم السلسلة) ؛4. الاستخدام
الخطوات الثلاث المذكورة أعلاه تكمل بشكل أساسي تطوير الطبقة ذات الصلة. عند استخدامه ، ما عليك سوى استخدامه كفئة عادية ويمكن حقنه فيه.
Runwith (springrunner.class) springboottestpublic class usermapperTest {AuTowiredPrivate UserMapper UserMapper ؛ testpublic void testinsert () rems {usermapper.insert (new userentity ("aa" ، "a123456" userentity ("bb" ، "B123456" ، userexenum.woman)) ؛ usermapper.insert (مستخدم جديد ("cc" ، "b123456" ، userexenum.woman)) usermapper.getall () ؛ system.out.println (user.toString ()) ؛}@testpublic void testupdate () يلقي استثناء {userentity user = usermapper.getone (3l) ؛ system.out.println (user.toString ()) ؛ user.setnickname ("neo") ؛ usermapper.update (user) ؛ assert.assertTrue (("neo" .equals (usermapper.getone (3l) .getnickname ()))))))))))هناك إضافات كاملة وحذف وتعديلات وعمليات بحث في الكود المصدري ، لذلك لن نشرها هنا
نسخة XML الحد الأدنى
يحافظ إصدار XML البسيط على التقليد القديم لملفات التعيين. ينعكس التحسين بشكل أساسي في طبقة التنفيذ التي لا تحتاج إلى تنفيذها. سيجد النظام تلقائيًا SQL المقابل في ملف التعيين وفقًا لاسم الطريقة.
1. التكوين
ملف POM هو نفسه الإصدار السابق ، باستثناء أنه يتم إضافة التكوين التالي إلى application.properties
mybatis.config-locations = classpath: mybatis/mybatis-config.xmlmybatis.mapper-locations = classpath: mybatis/mapper/*. xml
يحدد عنوان ملف تعيين MyBatis Basic Configuration وملف رسم فئة الكيان
تكوين mybatis-config.xml
<Simation> <TypeAliases> <typealias alias = "integer" type = "java.lang.integer" /> <typealias alias = "long" type = "java.lang.long" /> <typealias alias = "hashmap" type = "java.util.hashmap" /> type = "java.util.linkedhashmap" /> <typealias alias = "arraylist" type = "java.util.arraylist" /> <typealias alias = "linkedlist" type = "java.util.linkedList" /> < /typeAliases> < /configration>
هنا يمكنك أيضًا إضافة بعض تكوين MyBatis الأساسي
2. أضف ملف تعيين المستخدم
<mapper namespace = "com.neo.mapper.usermapper"> <resultmap id = "baseresultmap" type = "com.neo.entity.userentity"> <id column = "id" property = "id" jdbctype = "bigint" /> <result username "property =" username " property = "password" jdbctype = "varchar" /> <result column = "user_sex" property = "usersex" كلمة المرور ، user_sex ، nick_name </sql> <select id = "getall" resultmap = "baseresultmap"> حدد <تضمين refid = "base_column_list" /> من المستخدمين < /select> <select id = "getOne" parameterty = "java.lang.long userwhere id = #{id} </select> <insert id = "insert" parametertype = "com.neo.entity.userentity"> إدراج في المستخدمين (اسم المستخدم ، كلمة المرور ، user_sex) قيم ( #{username} ، #{password} ، #{userex}) > تحديث المستخدمين. حيث id = #{id} </delete> </pked>في الواقع ، كان مجرد تحريك Mapper SQL من الإصدار السابق إلى XML هنا
3. اكتب رمز طبقة داو
الواجهة العامة usermapper {list <Seterentity> getAll () ؛ Userentity getOne (معرف طويل) ؛ إدراج باطل (مستخدم المستخدم) ؛ تحديث باطل (مستخدم المستخدم) ؛ void delete (id id) ؛}بالمقارنة مع الخطوة السابقة ، لم يتبق سوى طرق واجهة.
4. الاستخدام
لا يوجد فرق بين استخدامه والإصدار السابق ، يرجى إلقاء نظرة على الكود
كيفية الاختيار
الوضعان لهما خصائصهما الخاصة. النسخة المشروحة مناسبة للأوضاع البسيطة والسريعة. في الواقع ، مثل نموذج الخدمات الصغيرة الشائعة في الوقت الحاضر ، ستتوافق الخدمات الدقيقة مع قاعدة البيانات الخاصة بها. سيتم تقليل الطلب على استعلام الاتصال متعدد الطاولة بشكل كبير ، وسيصبح أكثر فأكثر مناسبًا لهذا الوضع.
النموذج التقليدي القديم أكثر ملاءمة للمشاريع الكبيرة. يمكن أن يولد SQL بشكل ديناميكي بشكل مرن ، وهو مناسب لضبط SQL ، كما أنه لديه شعور بكتابة SQL بسرور كبير وأنيقة.
رمز عينة-github: https://github.com/ityouknow/spring-oot-examples
مثال رمز-رمز السحابة: https://gite.com/ityouknow/spring-oot-examples