لقد لخصت ثلاث طرق في المقالة السابقة ، ولكن هناك طريقتان تتعلقان بـ SQL. هذه الطريقة مربكة للغاية ، لذلك لا يستخدمها الجميع كثيرًا. دعنا نلخص الطريقتين الشائعين:
1. فئة تنفيذ الوكيل الديناميكي دون كتابة داو
هذه الطريقة بسيطة نسبيا. لا تحتاج إلى تنفيذ طبقة DAO ، فأنت بحاجة فقط إلى تحديد الواجهة. هنا فقط لتسجيل ملف التكوين ، وبالتالي فإن البرنامج بسيط للغاية:
1. مخطط الهيكل العام:
2. ثلاثة ملفات تكوين وملف رسم الخرائط واحد
(1) مدخل البرنامج وتكوين وحدة تحكم الواجهة الأمامية web.xml
<؟ XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xd <SIDECT-NAME> WEBLOCT1 </display-name> <!-قم بإعداد الاستماع وتجميع معلومات التكوين تلقائيًا من ApplicationContext عند بدء تشغيل حاوية الويب-> <Stexer> <Stenger-Class> org.springframework.web.context.contextlistener </stanker-class> </leader> <! <Param-Name> contextConfigLocation </parm-name> <Param-value> classpath: config/springmvc-servlet.xml ، classpath: config/applicationContext.xml </parm-value> </context-param> <! <Filter-Class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <Init-param> <param-name> الترميز </init-param> <Irap-value> utf-8 </parm-value> <Param-value> true </param-value> </ith-param> </filter> <filter-mapping> <filter-name> encodingFilter </filter-name> <Url-pattern>*. <Servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <Init-param> <Param-name> contextConfigLocation </param-name> <param-value> classpath: config/springmvc-servlet.xml </parm-value> <load-on-startup> 1 </load-on-startup> </qervlet> <Servlet-Mapping> <Sradlet-Mapping> <Sradlet-Name> springmvc </servlet-name> <!-intercept-> <url-pattern>*. <ishosle-file> index.htm </ishified-file> <lispile> index.jsp </ishified-file> <lispile-file> default.html </elsing-file> <lispile-file> default.htm </elverfile> <selopfile> default.jsp </iship-file> </welcom
(2) طبقة التحكم في المسح الضوئي ، الحقن التلقائي وعرض تكوين المحلل springmvc-servlet.xml
<؟ xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: context = "http://www.springframework.org/schema/context" Xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: util = "http://www.springframework.org/schema/util xmlns: tx = "http://www.springframework.org/schema/tx" Xmlns: Cache = "http://www.springframework.org/schema/cache" http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/spring-3 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/util/spring-util-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3 http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3 السياق: المستحضر المكون لديه وظيفة من التعليق التوضيحي-> <!-طبقة التحكم في المسح-> <السياق: مكون المستحضر الأساسي = "com.website.controller"> </context: prefix component> <! name = "FASEIX" value = "
(3) مصدر البيانات ، المسح التلقائي للحقن والحقن ، يدير الربيع mybatissqlsessionfactory ، وكيل ديناميكي واجهة الطبقة DAO ، وتكوين المعاملات ApplicationContext.xml
سيكون هناك عدة ملفات تكوين هنا
1) مصدر بيانات واحد ، الوكيل الديناميكي لا يضع قيم خصائص SQLSessionFactoryBeanName أو SQLSessionTemplateBeanName عند تنفيذ واجهة طبقة DAO.
<؟ xmlns: tx = "http://www.springframework.org/schema/tx" http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context-ctpring-ctpr http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <! id = "datasource"> <property name = "driverClassName"> <value> $ {jdbc.driverClassName} </value> </simperter> <property name = "url"> <value> $ {jdbc.url} </value> </propert name = "password"> <value> $ {jdbc.password} </value> </property> </boup> <!-قم بتشغيل تكوين التعليقات التوضيحية ، وهي AutoWried-> <!-<سياق: Conteact-Config/>-> <! base-package = "com.website.service" /> <!-عند استخدام myBatis ، يستخدم الربيع sqlsessionfactorybean لإدارة mybatis 'sqlsessionfactory-> <bean id = "sqlsessionfactory"> <property name = "datasource ref =" datasource " / /> <!-مسار ملف خريطة فئة الكيان ، يتم كتابة واحد منهم فقط إلى النهاية ، ويمكن استبدال العديد من mybatis/*. Bean = "sqlsessionfactory"/> </constructor-arg> </bean>-> <!-تنفيذ الوكيل الديناميكي لا يحتاج إلى كتابة dao-> <bean id = "mapperscannerconfigurer"> <! value = "com.website.dao" /> <!-إذا كان هناك مصدر بيانات واحد فقط ، لا يمكنك تحديده ، ولكن إذا كان هناك مصادر بيانات متعددة ، فيجب عليك تحديدها-> <!-<property name = "sqlSessionFactoryBeannam name = "sqlsessionTemplateBeanname" value = "sqlsession" />-> </bean> <!-مدير المعاملات-> <bean id = "TransactionManager"> <property name = "dataSource" ref = "dataSource" /> < /! </beans>2) تكوين قيمة خاصية SQLSessionFactoryBeanName لمصدر بيانات واحد
<؟ xmlns: tx = "http://www.springframework.org/schema/tx" http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context-ctpring-ctpr http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <! id = "datasource"> <property name = "driverClassName"> <value> $ {jdbc.driverClassName} </value> </simperter> <property name = "url"> <value> $ {jdbc.url} </value> </propert name = "password"> <value> $ {jdbc.password} </value> </property> </boup> <!-قم بتشغيل تكوين التعليقات التوضيحية ، وهي AutoWried-> <!-<سياق: Conteact-Config/>-> <! base-package = "com.website.service" /> <!-عند استخدام myBatis ، يستخدم الربيع sqlsessionfactorybean لإدارة mybatis 'sqlsessionfactory-> <bean id = "sqlsessionfactory"> <property name = "datasource ref =" datasource " / /> <!-مسار ملف خريطة فئة الكيان ، يتم كتابة واحد منهم فقط إلى النهاية ، ويمكن استبدال العديد من mybatis/*. Bean = "sqlsessionfactory"/> </constructor-arg> </bean>-> <!-تنفيذ الوكيل الديناميكي لا يحتاج إلى كتابة dao-> <bean id = "mapperscannerconfigurer"> <! value = "com.website.dao" /> <!-إذا كان هناك مصدر بيانات واحد فقط ، لا يمكنك تحديده ، ولكن إذا كان هناك مصادر بيانات متعددة ، فيجب عليك تحديدها-> <property name = "sqlsessionfactorybeanname" value = "sqlsessionfactory" /> <! name = "sqlsessionTemplateBeanname" value = "sqlsession" />-> </bean> <!-مدير المعاملات-> <bean id = "TransactionManager"> <property name = "dataSource" ref = "dataSource" /> < /! </beans>3) تكوين قيمة خاصية SQLSessionTemplateBeanName لمصدر بيانات واحد
<؟ xmlns: tx = "http://www.springframework.org/schema/tx" http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context-ctpring-ctpr http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <! id = "datasource"> <property name = "driverClassName"> <value> $ {jdbc.driverClassName} </value> </simperter> <property name = "url"> <value> $ {jdbc.url} </value> </propert name = "password"> <value> $ {jdbc.password} </value> </property> </boup> <!-قم بتشغيل تكوين التعليقات التوضيحية ، وهي AutoWried-> <!-<سياق: Conteact-Config/>-> <! base-package = "com.website.service" /> <!-عند استخدام myBatis ، يستخدم الربيع sqlsessionfactorybean لإدارة mybatis 'sqlsessionfactory-> <bean id = "sqlsessionfactory"> <property name = "datasource ref =" datasource " / /> <!-مسار ملف خريطة فئة الكيان ، يتم كتابة واحد منهم فقط إلى النهاية ، ويمكن استبدال العديد من mybatis/*. /> < /constructor-arg> </bean> <!-تنفيذ الوكيل الديناميكي لا يتطلب كتابة dao-> <bean id = "mapperscannerconfigurer"> <!-basepackage هنا تم تحديد قوة واجهة dao layer exative ، و interface هنا! هو مصدر بيانات واحد فقط ، لا يمكنك تحديده ، ولكن إذا كان هناك مصادر بيانات متعددة ، فيجب عليك تحديدها-> <!-<property name = "sqlsessionfactorybeanname" value = "sqlsessionfactory" />-> <! value = "sqlsession" /> </bean> <!-مدير المعاملات-> <bean id = "TransactionManager"> <property name = "dataSource" ref = "datasource" /> </bean> <!-باستخدام معاملة التعليقات التعليق الكاملة-> <TX: التعليقات الاسترداد-المعاملات-4) مصادر بيانات متعددة
لاحظ أنه إذا كان مصدرًا متعدد البيانات ، فيجب عليك استخدام SQLSessionFactoryBeanName أو SQLSessionTemplateBeanName لتحديد مصدر البيانات المحدد. لا أعرف ما إذا كنت قد لاحظت ذلك في التكوين أعلاه. إذا كنت تستخدم SQLSessionTemplateBeanName ، فيجب عليك
<bean id = "sqlsession"> <constructor-arg index = "0"> <ref bean = "sqlsessionfactory"/> </constructor-arg> </bean>
لإنشاء مثيل معين وتعيينه إلى خاصية SQLSessionTemplateBeanName.
(4) ، ملف تعيين mybatis SQL usermapper.xml:
<؟ لهذا العرض التوضيحي ، فإن مساحة الاسم هي المسار الكامل لـ userdao.java-> <mapper namepace = "com.website.dao.userdao"> <!-المعرف هنا هو اسم الطريقة في الواجهة-> <insert id = "saveuser" parametertype = "java.util.map"> القيم (#{id} ،#{name}) </insert> </mapper>حسنًا ، دعنا نذهب إلى ملف التكوين وإنجازه. دعنا نلقي نظرة على طبقة التحكم وطبقة منطق العمل ورمز طبقة DAO.
3. طبقة تحكم
حزمة com.website.controller ؛ استيراد java.util.hashmap ؛ استيراد java.util.map ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.stereotype.controller ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.requestmethod ؛ استيراد com.website.service.userservice ؛ controller @requestmapping (value = "/user") الفئة العامة USERCONTROLLER {// upjecterviceervice objectawired orperveservice ؛ requestMapping (value = "/save.do" ، method = requestMethod.get) السلسلة العامة SaveUser (طلب httpservletrequest ، استجابة httpservletponse) {string id = request.getParameter ("id") ؛ اسم السلسلة = request.getParameter ("name") ؛ خريطة <string ، string> map = new hashmap <string ، string> () ؛ map.put ("id" ، id) ؛ map.put ("الاسم" ، الاسم) ؛ userService.saveuser (MAP) ؛ إرجاع "فهرس" ؛ }}4. طبقة الخدمة
حزمة com.website.service ؛ استيراد java.util.map ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.stereotype.service ؛ استيراد org.springframework.transaction.annotation.transactional ؛ استيراد com.website.dao.userdao ؛ service ("userverservice") transactional الفئة العامة orterservice {// Injection DAO enterface class class // يمكن أن يكون كلتا الطريقتين userdao userdao private userdao ؛ public void saveUser (map <string ، string> map) {int end = userDao.saveuser (map) ؛ System.out.println ("End:" + end) ؛ }}5. واجهة طبقة داو
حزمة com.website.dao ؛ استيراد java.util.map ؛ //com.website.dao.userdao public interface userDao {int saveUser (map <string ، string> map) ؛ } المسار الكامل لواجهة DAO هو مساحة اسم ملف التعيين المقابل لواجهة DAO هذه ، واسم الطريقة هو قيمة المعرف
حسنًا ، انتهت طريقة التكوين هذه ، وهناك أيضًا عرض تجريبي صغير كامل. دعونا نلخصه بإيجاز أدناه:
بالمقارنة مع طريقة التكوين السابقة (والتي سيتم كتابتها أدناه) هي أنها تستخدم طريقة الوكيل الديناميكي لواجهة طبقة DAO. قبل ذلك ، سنقوم بتنفيذ طبقة DAO يدويًا في طبقة DAO ثم حقن مثيل SQLSessionTemplate تلقائيًا لاستدعاء طرق محددة مثل إدراج ("" ، "") SelectOne ("" ، "") وطرق أخرى. المعلمة الأولى هي عنوان ملف التعيين: مساحة الاسم+معرف ، والمعلمة الثانية هي الشروط التي تم تمريرها. وبهذه الطريقة ، سيجد MyBatis ملف التعيين المحدد وفقًا للمعلمات التي مررنا بها لتحليلها والاستعلام. إن استخدام الوكيل الديناميكي هنا يلغي خطوة تنفيذ واجهة DAO ، لكننا قمنا بتنفيذها بحلول الربيع. هناك مشكلة. مررنا معلمات حالة الاستعلام ، ولكن المسار المحدد لملف التعيين هو: NamesPce+ID. ماذا علي أن أفعل إذا لم يتم تمريره؟ أي أن مساحة اسم ملف التعيين الخاصة بك يجب أن تكون الاسم الكامل لفئة الواجهة ويجب أن يكون المعرف هو اسم الطريقة في الواجهة ، بحيث يمكن للوكيل الديناميكي العثور على المسار وله أيضًا معلمات. هل تعتقد أنه نفس الشيء؟ هاهاها!
2. قم بتنفيذ واجهة طبقة DAO يدويًا
دعنا أولاً نلقي نظرة على التكوين والرمز لتنفيذ طبقة DAO يدويًا:
1. هيكل الرسم البياني للموضوع
2. ثلاثة ملفات تكوين وملفات رسم الخرائط
(1) إدخال البرنامج ، ويب تكوين وحدة التحكم في الواجهة الأمامية.
<؟ XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xd <splay-name> website2 </isplay-name> <!-تحميل تكوين حاوية الزنبرك-> <Stexer> <Seganer-Class> org.springframework.web.context.contextLoaderListener </baram-class> </stanker> <!-قم بتعيين مسار تكوين تحميل حاوية الربيع- <Param-value> classpath: config/springmvc-servlet.xml ، classpath: config/applicationContext.xml </param-value> </sultext-param> <!-مرشح تشفير الأحرف-> <filter> <filter-name> encodingfilter </filter-name> <Filter-Class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <Init-param> <param-name> الترميز </init-param> <Irap-value> utf-8 </parm-value> <Param-value> true </param-value> </ith-param> </filter> <filter-mapping> <filter-name> encodingFilter </filter-name> <Url-pattern>*. <Servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <Init-param> <Param-name> contextConfigLocation </param-name> <param-value> classpath: config/springmvc-servlet.xml </parm-value> <load-on-startup> 1 </ load-on-startup> </stervlet> <Servlet-mapping> <Sradlet-Name> springmvc </stervlet-name> <!-intercept request-> <url-pattern>*. <ishosle-file> index.htm </ishified-file> <lispile> index.jsp </ishified-file> <lispile-file> default.html </elsing-file> <lispile-file> default.htm </elverfile> <selopfile> default.jsp </iship-file> </welcom
(2) طبقة التحكم في المسح الضوئي ، الحقن التلقائي وعرض تكوين المحلل springmvc-servlet.xml
<؟ xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: context = "http://www.springframework.org/schema/context" Xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: util = "http://www.springframework.org/schema/util xmlns: tx = "http://www.springframework.org/schema/tx" Xmlns: Cache = "http://www.springframework.org/schema/cache" http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/spring-3 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/util/spring-util-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3 http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd "> <! <context: component-scan base-package = "com.webbsite.controller"> </context: component-scan> <!-view parser-> <bean id = "viewResolver"> <property name = "prefix" value = "/web-inf/"> </propert
(3) مصدر البيانات ، المسح الأوتوماتيكي للحقن والحقن ، يدير الربيع mybatissqlsessionfactory وتكوين المعاملات ApplicationContext.xml
<؟ xmlns: tx = "http://www.springframework.org/schema/tx" http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context-ctpring-ctpr http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <! id = "datasource"> <property name = "driverClassName"> <value> $ {jdbc.driverClassName} </value> </simperter> <property name = "url"> <value> $ {jdbc.url} </value> </propert name = "password"> <value> $ {jdbc.password} </value> </property> </boan> <!-قم بتشغيل تكوين التعليقات التوضيحية ، أي تلقائيًا-> <!-المكون المستحضر لديه وظيفة التعليق التوضيحي ، أي ضغوط ، عند استخدام inting ant int! إنه لمسح الفول قبل استخدامه-> <سياق: مكون من القاعدة المستحقة = "com.website.service ، com.website.dao" /> <!-عند استخدام mybatis ، يستخدم الربيع sqlsessionfactorybean لإدارة mybatis 'sqlsessionfactory- يوفر بعض الطرق-> <bean id = "sqlsessionfactory"> <property name = "datasource" ref = "datasource" /> <!-مسار ملف تكوين myBatis-> <property name = "configlocation" value = "" "" /> <! value = "classpath: mybatis/usermapping.xml"/> </bean> <!-في الواقع ، فإن مثال هذه الفئة هو sqlsession في myBatis-> <bean id = "sqlsession"> <constructor-arg index = "0" name = "datasource" ref = "datasource" /> </bean> <!-استخدم معاملة التعليقات التوضيحية الكاملة-> <tx: معاملة المعاملة التي تعتمد على التعليقات التوضيحية = "TransactactionManager" /> < /Beans>(4) ملف تعيين MyBatis
<؟ بعد أن نكتب المسار الكامل في طبقة dao mybatis هو تعيين عبارات SQL ذات الصلة في هذا الملف-> <mapper namepace = "com.website.usermapper"> <!-parametertype هو نوع المعلمة التي تقبلها ،-> <! المستخدم (المعرف ، الاسم ، كلمة المرور) القيم (#{id} ،#{name} ،#{password}) </sert> </papper>قد ترى أن مساحة الاسم +معرف ملف التعيين هنا مخصص بدلاً من اسم الفئة الكاملة +معرف واجهة DAO Layer.
3. وحدة التحكم
حزمة com.website.controller ؛ استيراد java.util.hashmap ؛ استيراد java.util.map ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.stereotype.controller ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد com.website.service.userservice ؛ /*** Author WHD Data 5 يونيو ، 2016*/controller @requestmapping (value = "/user") الفئة العامة USERCONTROLLER requestmapping (value = "/save.do") السلسلة العامة SaveUser (طلب httpservletrequest ، httpservletresponse استجابة) {string id = request.getParameter ("id") ؛ اسم السلسلة = request.getParameter ("name") ؛ سلسلة كلمة مرور = request.getParameter ("كلمة المرور") ؛ خريطة <string ، string> map = new hashmap <string ، string> () ؛ map.put ("id" ، id) ؛ map.put ("الاسم" ، الاسم) ؛ map.put ("كلمة المرور" ، كلمة المرور) ؛ userService.saveuser (MAP) ؛ إرجاع "فهرس" ؛ }}4. خدمة طبقة منطق الأعمال
حزمة com.website.service ؛ استيراد java.util.map ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.stereotype.service ؛ استيراد org.springframework.transaction.annotation.transactional ؛ استيراد com.website.dao.userdao ؛ / *** Author WHD Data 5 يونيو 2016*/ service ("userverservice") transactional الفئة العامة uSperService {Autowired private userdao userdao ؛ public void saveUser (map <string ، string> map) {userDao.saveuser (map) ؛ }}5. طبقة داو
حزمة com.website.dao ؛ استيراد java.util.map ؛ استيراد org.mybatis.spring.sqlsessionTemplate ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.stereotePe.Repository ؛ / *** Author WHD Data 5 يونيو ، 2016*/ REPOSTORY ("userDao") الفئة العامة userDao {autowired sqlsessionTemplate sqlsession ؛ public void saveUser (map <string ، string> map) {int end = sqlsession.insert ("com.website.usermapper.insertuser" ، map) ؛ system.out.println ("end" + end) ؛ }}نحن ننظر إلى SQLSessionTemplate من طبقة DAO المقلوبة. هذا هو في الواقع كائن sqlsession في mybatis. نرى أنه تم تكوينه في ApplicationContext.xml ، لذلك عندما نستخدمه ، سيتم حقنه تلقائيًا. يمكننا استخدامه مباشرة دون إنشاءه بأنفسنا. هذا هو ما يسمى الانعكاس السيطرة. حسنًا ، انتهت طرق التكوين لهذين الملفان.
لخص
ما سبق هو شرح مفصل لطرق التكوين في الربيع و mybatis المقدمة لك (طريقتان شائعتين). آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!