بناء منصة mybatis+postgresql من الصفر
في الآونة الأخيرة ، تستخدم قاعدة بيانات المشروع postgreSQL لتشغيل البيانات باستخدام MyBatis الأصلي. لا حرج في MyBatis الأصلي. ومع ذلك ، هناك أداة tk.mybatis في الصين تساعدنا على القيام بالكثير من الأشياء العملية. في معظم الحالات ، نحتاج إلى معالجة MyBatis الأصلي. لقد تم تنفيذها بشكل جيد. ستشارك هذه المقالة الخطوات التفصيلية لتثبيت postgreSQL ، وتكوين tk.mybatis ، وبعض المشكلات البسيطة التي قد تواجه في هذه العملية.
قم بتثبيت postgresql ، قم بتنفيذ الأمر التالي للتثبيت: انسخ الرمز كما يلي: apt-get update && apt-get install postgresql
بعد تثبيت الخادم ، نحتاج أيضًا إلى PDADMIN عميل مع واجهة رسومية. لقد قمت بتثبيت إصدار Windows من PostgreSQL ، ويمكنك العثور على الإصدار المقابل في هذا العنوان. بعد نجاح التثبيت ، سيتم إنشاء مستخدم النظام ومستخدم قاعدة البيانات افتراضيًا. الاسم وكلمة المرور كلها postgres. يمكننا إنشاء مستخدم جديد أو استخدام هذا الحساب مباشرة. على أي حال ، أنا مجرد اختبار. بعد اكتمال التثبيت ، قد تواجه مشاكل في الوصول عن بُعد:
مشكلة الاتصال عن بُعد ، يتم السماح فقط بالاتصالات المحلية افتراضيًا. للسماح للعملاء الآخرين بالاتصال ، يمكننا تعديل ملف التكوين الخاص به. يوجد دليل هذا الملف في /etc/postgresql/9.5/main. يوجد ملفان في هذا الدليل:
1: postgresql.conf ، هذا مرتبط بالخادم ، وهناك عنوان stive_address ، يستمع فقط إلى الافتراضي ، ويمكننا تعديله.
2: pg_hba.cof ، وهذا يرتبط بأذونات المستخدم ، هناك تكوين مرتبط بالاتصال ، يمكن تكوينه في وضع البوابة
بعد اتصال ناجح ، ربما يكون مثل هذا ، يمكننا إنشاء قواعد بيانات وجداول وغيرها من الكائنات.
مولد رمز MyBatis ، رسم خرائط لقاعدة البيانات والنموذج ، يجب ترك هذا العمل الميكانيكي إلى الجهاز لإكماله. يرجى الرجوع إلى التفاصيل هنا.
General Mapper ، يمكن أن تساعدنا عملية Crud في الجدول الواحد واجهة عامة ، ويمكن أن يساعدنا Mapper العامة التي توفرها TK.MyBatis في حل هذا النوع من المشكلات.
---- mapper.xml ، صغيرة بما يكفي (بما في ذلك خرائط الحقل فقط)
<mapper namespace = "com.jim.logstashmvc.dao.generated.mapper.productMapper"> <resultmap id = "baseresultmap" type = "com.jim.logstashmvc.dao.generated.entity.product"> <! property = "id" /> <result column = "name" jdbctype = "varchar" property = "name" /> </sroperemap> < /mapper>
---- mapper ، بسيط بما فيه الكفاية (مجرد ورث من واجهة الخريطة)
نسخة الكود كما يلي: الواجهة العامة ProductMapper تمتد Mapper <Product> {}
المكونات الإضافية ، إليك الإضافات المصنوعة من الإضافات ، والمكونات الإضافية لتحليل أداء SQL ، وما إلى ذلك ، من السهل جدًا الاندماج مع MyBatis.
كيف تتكامل مع الربيع؟
تكامل المولدات ، يمكنك استخدام طريقة Maven لتشغيل مولد الرمز.
تعتمد على الحزم
<!-MyBatis-> <reperency> <rougiD> org.mybatis </rougeid> <StifactId> myBatis </shintifactid> <sophy> $ {myBatis.version} </spertic> </reperency> <!-تكامل الربيع-> <sependency> org.mymybatis </group. <sophy> $ {mybatis.spring.version} </version> </sependency> <!-MBG-> <Rependency> <roupeD> org.mybatis.generator </groupId> <StifactId> mybatis-generator-core </shopactid> <pottors> true </pectial> </sependency> <!-ترقيم الصفحات-> <reperency> <roupiD> com.github.pageHelper </rougeid> <trintifactid> pagehelper </stifactid> <speration> $ {pagehelper.version} </version> <! <StifactId> mapper </stifactid> <soph> $ {mapper.version} </version> </sependency> <!-سوف يستخدم tkmybatis التعليقات التوضيحية jpa-> <reperency> <roucid> javax.persistence </groupiD> <roupl> org.postgresql </rougeid> <StifactId> postgresql </shintifactid> <الإصدار> 9.3-1102-jdbc41 </version> </sependency>المكون الإضافي لمولد التكوين ، حدد مسار ملف التكوين ، تبعيات التكوين: واحد هو برنامج تشغيل قاعدة بيانات ، والآخر هو خريطة عامة
<!-mbg-> <cludin> <roucid> org.mybatis.generator </groupId> <StifactId> mybatis-generator-maven-plugin </shintifactid> <soph> $ {mbg.version} </version> <configuration> <IctuctionFile> $ {inrialir} /src/main/resources/generator/generatorConfig.xml </isconfigurationfile> <severtwrite> true </struprite> <perbose> true </perbose> </isponstragtion> <StifactId> postgresql </shintifactid> <soph> 9.3-1102-jdbc41 </sophy> </emperency> <redence> <rouper> tk.mybatis </rougid> </intifaCtid> mapper </stifactid>ملف تكوين المولد
** تكوين اتصالات قاعدة البيانات
** قم بتكوين مسارات التخزين للنموذج الذي تم إنشاؤه و mapper و mapper.xml
** قم بتكوين معلومات الجدول المراد إنشاؤها
لاحظ أن TargetRuntime ، إليك MyBatis3Simple ، وخياره الافتراضي هو MyBatis3. إذا استخدمنا خريطة عامة ، فيمكننا كتابة هذا عند مسح الواجهة في الربيع.
انسخ الرمز كما يلي: <bean> <property name = "sqlsessionfactorybeanname" value = "jimsqlsessionfactory"/> <property name = "basePackage" value = "com.jim.logstashmvc.dao.generated.mapper"/> </bean>
إذا كان MyBatis3 ، فسيكون تنسيق mapper.xml الذي تم إنشاؤه أكثر تعقيدًا. لقد واجهت هذه المشكلة من قبل: استخدام mapper.xml الذي تم إنشاؤه بواسطة myBatis3 ، ثم تكوين MappersCannerConfigurer بشكل غير صحيح إلى وضع Mapper العام التالي ، مما يطالبني على النحو التالي. يمكن تحديد السبب ليكون مشكلة تكوين (وليس معرف مكرر في mapper.xml). سأدرس تكوين الخريطة غير الجينية لاحقًا.
انسخ الرمز على النحو التالي: سبب: java.lang.IlegalArgumentException: مجموعة عبارات معبدة تحتوي بالفعل على قيمة لـ com.jim.logstashmvc.dao.generated.mapper.productmapper.selectbyexampleat org.ibatis.session.configuration $ strantmap.put org.apache.ibatis.session.configuration $ strightMap.put (configuration.java:809)
تكوين المولد كما يلي:
انسخ الرمز كما يلي: <generatorConfiguration> <properties resource = "config.properties"/> <context targetruntime = "mybatis3simple" defaultModelType = "flat"> <property name = "startDelimiter" value = "` "/> <property name =" enddelimiter " type = "$ {mapper.plugin}"> <property name = "mappers" value = "$ {mapper.mapper}"/> </sultcin> <jdbcconnection driverClass = "$ {jdbc.driverclass}" connectionurl = "$ {jdbc.url} password = "$ {jdbc.password}"> </jdbcconnection> <javamodelgenerator targetpackage = "$ {targetModelPackage}" targetProject = "$ {targetjavaproject}"/> <sqlmapgenerator targetpack = <javaclientgeneratorator targetpackage = "$ {targetMapperPackage}" targetProject = "$ {targetJavaproject}" type = "xmlmapper"> </javaclientgenerator> <table tablename = "product" domainobjectname = "product"> الشكل أدناه.
يقوم MyBatis Integration بشكل أساسي بتكوين معلومات تجمع الاتصال ، والمكونات الإضافية ، ومسح Mapper وغيرها من المعلومات.
<bean id = "jimdatasource"> <property name = "driverClassName" value = "$ {jdbc.driverclass}"/> <property name = "url" value = "$ {jdbc.url}"/> <property name = "username" value = $ {jdbc.username} value = "$ {JDBC.Password}"/> <property name = "initialsize" value = "5"/> <property name = "minidle" value = "10"/> <property name = "maxwait value = "3600000"/> <property name = "ValidationQuery" value = "select 1"/> <property name = "testwhileIdle" value = "true"/> <property name = "testOnBorrow" name = "datasource" ref = "jimdatasource"/> <property name = "mapperlocations" value = "classpath: mapper/*. لهجة = postgresql معقول = support supportmethodsarguments = true returnpageInfo = check params = count = countsql </value> </property> </bean> </ray> </property> </bean> <bean> <property name = "sqlsessionfactorybeanname" value = "jimsqlsession"/> value = "com.jim.logstashmvc.dao.generated.mapper"/> </bean>استخدام General Mapper:
• mapper ، يتم توريث جميع المخططات التي تم إنشاؤها من Mapper <T> ، وتحتفظ بجميع واجهات Mapper الشائعة افتراضيًا ، بما في ذلك عمليات CRUD المشتركة.
• Iservice ، تعريف واجهة Mapper العامة ، يمكننا تعديل هذه الواجهة وفقًا لأعمالنا الخاصة
ServicePublic Interface Iservice <T> {t selectByKey (مفتاح الكائن) ؛ int حفظ (كيان t) ؛ int delete (مفتاح الكائن) ؛ int updateall (t unitty) ؛ int updatenotnull (t unitty) ؛ قائمة <T> selectByExample (مثال كائن) ؛ // TODO الآخرين ...}Baseservice ، فئة تنفيذ Mapper العامة
Public Class Class Baseservice <T> تنفذ iservice <T> {Autowired Mapper <T> mapper ؛ MAPPER العامة <T> getMapper () {return mapper ؛ } Override public t selectByKey (مفتاح الكائن) {return mapper.selectbyprimarykey (key) ؛ ) } public int delete (Object Key) {return mapper.deleteByPrimaryKey (key) ؛ } public int updateall (t intity) {return mapper.updateByPrimaryKey (untity) ؛ } public int updatenotnull (t intity) {return mapper.updateByPrimaryKeySelective (intity) ؛ } القائمة العامة <T> selectByExample (مثال كائن) {return mapper.selectbyexample (مثال) ؛ } // todo الآخرين ...}فئات خدمة محددة
servicepublic class producterviceImpl يمتد Baseservice <Tromprom> Productervice {Override Public List <Terfort> selectByProduct (منتج المنتج ، صفحة int ، صفوف int) {مثال على مثال جديد (product.class) ؛ example.riteria معايير = example.createcriteria () ؛ if (! stringUtils.IsBlank (product.getName ())) {conteria.andequalto ("name" ، product.getName ()) ؛ } if (product.getID ()! = null) {conteri.andequalto ("id" ، product.getId ()) ؛ } pagehelper.startPage (صفحة ، صفوف) ؛ إرجاع selectByexample (مثال) ؛ }}قم بتثبيت postgresql واتصل بنجاح عن بُعد ، ودمج MBG لإنشاء Mapper وطراز ، ثم دمج MyBatis مع Spring ، وأخيراً قم بتوصيله من خلال Mapper عام لتحقيق هدفنا: إكمال معظم العمل من خلال كمية صغيرة من التعليمات البرمجية ، وتسليمها إلى الأداة للعمل المتكرر. لكن لدى General Mapper مزاياه وعيوبه ، ويجب موازاعه وفقًا لبيئة المشروع. أنا شخصياً أشعر أن الفوائد تفوق العيوب.
استشهد به هذا المقال:
1. http://www.mybatis.tk/
2. https://github.com/abel533/mybatis-spring
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.