تكامل الربيع و mybatis
أفكار التكامل
يحتاج الربيع إلى إدارة SQLSessionFactory من خلال Singleton.
يتكامل Spring و MyBatis لإنشاء كائنات وكيل واستخدام SQLSessionFactory لإنشاء SQLSession. (يتم إكمال تكامل الربيع و MyBatis تلقائيًا)
يجب أن تتم إدارة تعيينات طبقة الثبات بحلول الربيع.
دمج البيئة
قم بإنشاء مشروع جديد Java (بالقرب من الهيكل الهندسي المتقدم الفعلي)
حزمة جرة:
MyBatis3.2.7 حزمة جرة
Spring3.2.0 جرة حزمة
MyBatis و Spring Integration Package: تم توفير تكامل Ibatis و SPRING المبكر في الربيع ، والآن يتم توفير MyBatis و Spring Integration بواسطة MyBatis.
جميع حزم الجرة (بما في ذلك springMVC)
الهيكل الهندسي
الخطوة 1: دمج وتكوين SQLSessionFactory
تكوين SQLSessionFactory ومصدر البيانات في ApplicationContext.xml
SQLSessionFactory تحت حزمة التكامل من MyBatis و Spring.
<!-تحميل ملف التكوين-> <السياق: property-placeholder location = "classpath: db.properties" /> <!-مصدر البيانات ، استخدم dbcp-> <bean id = "dataSource" destroy-method = "close"> <property name = "driverClassName" value = "$ {jdbc.driver}" value = "$ {jdbc.url}" /> <property name = "username" value = "$ {jdbc.username}" /> <property name = "password" value = "$ {jdbc.password}" /> <property name = "maxaveal" value = " /> <property name =" maxidle " -> <bean id = "sqlsessionfactory"> <!-تحميل ملف تكوين myBatis-> <property name = "configlocation" value = "mybatis /sqlmapconfig.xml" /> <!-مصدر البيانات->التطوير الأصلي (بعد التكامل مع الربيع)
sqlmap/user.xml
تحميل user.xml في sqlmapconfig.xml
DAO (تنفيذ الوراثة الفئة sqlsessiondaosupport)
في السابق ، كانت فئة تنفيذ واجهة DAO مطلوبة لحقن SQLSESSOINFACTORY وحقنها خلال الربيع.
هنا نستخدم الربيع لإعلان طريقة التكوين وتكوين حبة DAO:
دع userDaoImpl تنفذ فئة وراثة sqlsessiondaosupport
تكوين DAO
تكوين واجهة DAO في ApplicationContext.xml
<!-واجهة DAO الأصلية-> <bean id = "userDao"> <property name = "sqlsessionfactory" ref = "sqlsessionfactory"/> </bean>
إجراءات الاختبار
Source_folder/userDaoImpltest.javapublic class userDaoImpltest {private applicationContext ApplicationContext ؛ // get spring container in setup method @forepublicpublic void setup () throws {ApplicationContext = new classpathxmlicationContext ("classpath: يلقي استثناء {userDao userDao = (userDao) ApplicationContext.getBean ("userDao") ؛ // اتصل بمستخدم المستخدم = userdao.finduserbyid (1) ؛ system.out.println (user) ؛}}}}Mapper Agent Development
usermapper.xml و usermapper.java
فقط انسخ المشروع السابق وحذف مسار الحزمة.
إنشاء كائنات وكيل من خلال mapperfactorybean
نظرًا لأن UserMapper ليس نوع واجهة ، فأنت بحاجة إلى استخدام MapPerFactoryBean لإنشاء نوع الواجهة
مشكلة في هذه الطريقة:
يجب تكوينه لكل خريطة ، مزعجة.
Mapper Scanning عبر mapperscannerconfigurer (موصى به)
* بعد تكوين مسار مسح Mapper من خلال خاصية BasePackage ، ليست هناك حاجة لتكوين مسار المسح في sqlmapperConfig.xml.
يتم استخدام خاصية SQLSessionFactoryBeanName هنا لأنه إذا تم تكوين خاصية SQLSessionFactory ، فلن يتم تحميل ملف تكوين قاعدة البيانات وتكوين مصدر البيانات أولاً (db.properties)
رمز الاختبار
هندسة عكسية
يتطلب MyBaits من المبرمجين كتابة عبارات SQL بأنفسهم. يوفر MyBatis المسؤول الهندسة العكسية لإنشاء الكود المطلوب تلقائيًا لتنفيذ MyBatis (mapper.java ، mapper.xml ، po ..)
في تطوير المؤسسة الفعلية ، طريقة هندسية عكسية شائعة الاستخدام: قم بإنشاء رمز Java بسبب جدول قاعدة البيانات.
تنزيل الهندسة العكسية
كيفية استخدام (يمكن استخدام) تشغيل الهندسة العكسية
يوصى باستخدام طريقة برنامج Java ولا تعتمد على أدوات التطوير.
إنشاء ملفات تكوين الرمز (4 أماكن تحتاج إلى تعديلها)
الموقع حيث يتم إنشاء فئة PO: cn.itcast.ssm.po
الموقع الذي يتم فيه إنشاء ملف تعيين Mapper: cn.itcast.ssm.mapper
موقع واجهة Mapper التي تم إنشاؤها: cn.itcast.ssm.mapper
حدد جدول قاعدة البيانات:
<table tablename = "heads"> </table> <table tablename = "orders"> </table> <table tablename = "orderdetail"> </table> تكوين المولد 1.0 // en "" http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd "> <generatorConfiguration> <context id =" testtables "targetruntime =" mybatis3 "> <!- name = "cumpressallcomments" value = "true"/> </commentGenerator> <!-معلومات عن اتصالات قاعدة البيانات: فئة برنامج التشغيل ، عنوان الاتصال ، اسم المستخدم ، كلمة المرور-> <jdbcconnection driverClass = "com.mysql.jdbc.driver" connectionurl = "jdbc: mysql: // localhost: 3306/mybatis" userId = "root" password = "mysql"> </jdbcconnection> <!- <jdbcconnection driverClass = "oracle.jdbc.oracledriver" connectionurl = "jdbc: oracle: thin:@127.0.0.1: 1521: yycg -> <!-الخاطئة الافتراضية ، فإن أنواع JDBC العشرية والرقم العشرية حلت إلى عدد صحيح. عندما يكون صحيحًا ، فإن أنواع JDBC العشرية والرقمية تحل إلى java.math.bigdecimal-> <Javatyperesolver> <property name = "forcebigdecimals" value = "false" /> < /javatyperesolver TargetPackage = "cn.itcast.ssm.po" TargetProject = "./ src"> <!-enblesubPackages: ما إذا كان لاستخدام المخطط كلاحقة للحزمة-> <property name = "enlabesUbackages" value = "false" /> <!-مسافات قبل وبعد أن يتم إرجاع القيمة من قاعدة البيانات-> /> </javamodelgenerator> <!-TargetProject: حيث يتم إنشاء ملف خريطة الخريطة-> <sqlmapgenerator targetpackage = "cn.itcast.ssm.mapper" TargetProject = "./ src"> <!-enblypackages: ما إذا كان لخطية أن تكون "package-> <sables * /> </sqlmapgenerator> <!-TargetPackage: موقع توليد واجهة Mapper-> <JavaclientGenerator type = "XmlMapper" TargetPackage = "cn.itcast.ssm.mapper" targetproject = "./ src"> <!-enslusts: ما إذا كان استخدام schema as the uffique is the the target. value = "false"/> </javaclientgenerator> <!-حدد جدول قاعدة البيانات-> <table tablename = "items"> </table> <table tableName = "Orders"> </table> <tablename = "orderdetail"> </table> <table tablename = user ">
تنفيذ المولد
رمز تم إنشاؤه
استخدام رمز تم إنشاؤه
تحتاج إلى نسخ الرمز الذي تم إنشاؤه في المشروع الذي تم إنشاؤه إلى مشروعك الخاص.
طرق الاختبار في العناصر
// custom inction querytestpublic void testselectbyexample () {itemSexample itemSexample = new itemSexample () ؛ // إنشاء شروط الاستعلام من خلال المعايير itemSexample.criteria معايير = itemSexample.createcriteria () ؛ معايير. headsmapper.selectbyexample (itemsexample) ؛ system.out.println (list) ؛} // QueryTestPublic void استنادًا إلى المفتاح الأساسي testselectbyprimarykey () = عناصر جديدة () ؛ items.setName ("mobile") ؛ items.setPrice (999f) ؛ headsmapper.insert (عناصر) ؛} // تحديث بيانات testupdatepdateByPrimary () CUP ") ؛ headsmapper.updateByPrimaryKey (العناصر) ؛ // إذا لم يكن الحقل الوارد فارغًا ، فاستخدم هذه الطريقة في تحديثات الدُفعات. ليست هناك حاجة للاستعلام أولاً ثم تحديث //itemsmapper.updateByPrimaryKeySelective(record) ؛}ما سبق هو تحليل موجز للتكامل والهندسة العكسية لـ Spring و MyBatis ، والتي آمل أن تكون مفيدة لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!