قبل بضعة أيام ، شاركت تنفيذ الترحيل من خلال استعلام ترقيم ترقيم SQL المكتوبة بخط اليد هنا. الآن دعنا نلقي نظرة على استخدام PageHepler MyBatis Paging Paginhepler لتنفيذ الترحيل.
السبب في استخدام المكون الإضافي للترحيل هو تبسيط كتابة رمز SQL وتحقيق ترحيل فعلي أفضل ، والذي يمكن أن يقلل من الأخطاء أيضًا من كتابة رمز SQL الكامل.
MyBatis Paging Plagin Demo عنوان المشروع: free-mybatis_pagehelper_jb51.rar
أستخدم تطبيق مشروع Maven هنا:
1. استيراد تبعيات المكون الإضافي للترحيل الأول:
<Rependency> <roupeD> com.github.pageHelper </rougiD> <intifactid> pagehelper </shintifactid> <splection> 5.0.0 </version> </sependency>
2. قم بتكوين المكون الإضافي للترحيل
هناك نوعان من المكونات الإضافية لصفحة التكوين للوثائق الرسمية
1. قم بتكوين المكون الإضافي لـ Interceptor في تكوين MyBatis XML
<!- يجب أن يفي موقع الإضافات في ملف التكوين بالمتطلبات ، وإلا سيتم الإبلاغ عن خطأ. الترتيب كما يلي: الخصائص؟ ، الإعدادات؟ ، typealiases؟ ، typehandlers؟ ، objectFactory؟ interceptor = "com.github.pageHelper.pageInterceptor"> <!-استخدم الطريقة التالية لتكوين المعلمات ، وسيكون هناك جميع المعلمات تم تقديمها لاحقًا-> <propert
2. قم بتكوين البرنامج المساعد Interceptor في ملف تكوين الربيع
باستخدام طريقة تكوين سمة الربيع ، يمكنك استخدام سمة الإضافات لتكوينها مثل ما يلي:
<bean id = "sqlsessionfactory"> <!-انتبه إلى التكوينات الأخرى-> <property name = "plugins"> <ray> <bean> <property name = "properties"> <!-تكوين المعلمات باستخدام الطريقة التالية ، تكوين سطر واحد-> value> params = value1 </value> </property>
أستخدم هنا النوع الثاني في مشروعي ، ويتم تكوين المعلمات الموجودة فيه وفقًا للموقف الفعلي ، أو يمكن تكوينها بدونها
3. أساليب الاتصال
تتم كتابة عبارات Mapper Layer SQL وفقًا لطريقة الاستعلام العامة ، دون كتابة الترحيل:
<!-استعلام ترقيم الصفحات-> <select id = "finds" resultType = "Country"> حدد معرف ، اسم CountryName ، CountryCode from Country </select>
واجهة طبقة Mapper:
/*** Query* param params* @return*/public list <Tearn> finds () ؛
واجهة طبقة خدمة الخدمة:
/ ** * استعلام ترقيم الصفحات * param parms pagination pageno (رقم الصفحة) ، pagesize (عدد الاستعلامات لكل صفحة) * return */ public pageInfo <Country> الاكتشافات (params params) ؛
فئة تنفيذ طبقة أعمال الخدمة: pagehelper.startPage (1 ، 10) ؛ تشير المعلمة الأولى إلى الصفحة والمعلمة الثانية تشير إلى عدد السجلات المعروضة في كل صفحة
بعد تنفيذ pagehelper.startPage (1 ، 10) ؛ البيان ، سيتم توزيع الطريقة الأولى التي تلي فورًا: قائمة <Curry> Blogs = CountryMapper.finds () ؛
ثم استخدم pageInfo لالتفاف نتائج الاستعلام ، pageInfo <Towner> pageInfo = new PageInfo <Tearnfo> (المدونات) ؛
وإرجاع pageinfo إلى طبقة التحكم
/*** Query*/public pageinfo <Townery> الاكتشافات (params params) // Query int pageno = params.getPageno () ؛ int pagesize = params.getPagesize () ؛ pagehelper.startPage (Pageno ، pagesize) ؛ قائمة <Curry> blogs = CountryMapper.finds () ؛ // لف النتيجة مع pageInfo <Tearric> pageInfo = new PageInfo <Towner> (المدونات) ؛ إرجاع pageinfo ؛ }
بعد إرجاع PageInfo هنا ، تمرير معلمات ترقيم التراجع و PAGEINFO في طبقة وحدة التحكم:
قائمة <Towner> clist = pageInfo.getList () ؛ ثم ضع clist في النطاق ، واستخدم <c: foreach> </c: foreach> إلى حلقة للحصول على بيانات الترحيل/*** الصفحة الرئيسية ، و pagination Query* @return*/ @requestmapping ("/index") فهرس النموذج العام (params) // أولاً الصفحة الأولى ، الاستعلام 10 params.setPageno (1) ؛ params.setpagesize (10) ؛ pageInfo <Townery> pageInfo = constryservice.finds (params) ؛ قائمة <Towner> clist = pageInfo.getList () ؛ // كمية الاستعلام الطويل couts = constryservice.counts () ؛ modelandview.addobject ("clist" ، clist) ؛ modelandview.addobject ("couts" ، couts) ؛ modelandview.setViewName ("index") ؛ إرجاع ModelandView ؛ }ما ورد أعلاه هي جميع رموز التنفيذ للصفحات الرئيسية. انظر الآن إلى رموز جميع التكوينات والتطبيقات:
pom.xml
<project xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" http://maven.apache.org/maven-v4_0_0.xsd "> <Dodeversion> 4.0.0 </modelversion> <roupiD> com.krry </rougiD> <StifactId> maven_pagehepler_ora </artifactid> war </packaging> <name> maven_pageHepler_ora </mame> <Url> http://maven.apache.org </url> <berties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <! <DrovedJavaproject> $ {injustr}/src/main/java </targetjavaproject> <TargetMapperPackage> com.isea533.mybatis.mapper </targetMappackage> <targetModelPackage> com.isea533.mybatis.model <TargetResourCesproject> $ {indizeir}/src/main/resources </targetResourCesproject> <DagdXMlPackage> mapper </sugarexmlpackage> <!-compile jdk- <mapper.version> 3.3.6 </mapper.version> <pagehelper.version> 5.0.0 </pagehelper.version> <mysql.version> 5.1.29 </mysql.version> <spring.version> <Rependencies> <Rependency> <roupiD> junit </rougiD> <StifactId> Junit </stifactid> <sored> 4.11 </version> <scope> اختبار </scope> </dependency> <redence> <sropend> log4j </rougiD> <roupl> javax.servlet </rougiD> <StifactId> servlet-api </stifactid> <الإصدار> 2.5 </version> <scope> متوفر </scope> </repreadency> <redency> <roupiD> javax.servlet.jsp </roucpeid> </reperency> <reperency> <roupiD> javax.servlet </rougiD> <intifactid> jstl </stifactid> <الإصدار> 1.2 </version> </repreadency> <reperence> <roupiD> javax.ws.rs </roucidid> <rougiD> javax.websocket </rougiD> <StifactId> javax.websocket-api </shintifactid> <الإصدار> 1.0 </version> </sependency> <rependency> <roupiD> javax.transaction </groupId> <StifactId> javax.transaction-api </srontifactid> <sophy> 1.2 </version> </sependency> <!-spring-> <nredency> <roupend> org.springframework </roupiD> <roupl> org.springframework </rougiD> <StifactId> spring-orm </artifactid> </reperence> <reperency> <roupiD> org.springframework </rougiD> <StifactId> spring-oxm </stifactid <StifactId> spring-jdbc </stifactid> </sependency> <redence> <roupiD> org.springframework </rougeid> <ProwEd> org.springframework </rougiD> <StifactId> Spring-Web </stifactid> </reperence> <redency> <roupiD> org.springframework </groupId> </groupiD> spring-aop </stifactid> </reperency> <StifactId> اختبار الربيع </artifactid> </sependency> <!-تبعيات Spring-Oxm-> <reperency> <roupiD> org.codehaus.castor </groupid> <StifactId> castor-xml </stifactid> <splement> 1.3.3 </version> </empendency> <roughid> com.fasterxml.jackson.core </rougiD> <StifactId> Jackson-Databind </shintifactid> <sored> 2.4.2 </version> </sependency> <sependency> <roucid> com.fasterxml.jackson.dataformat </groupid> <terifactid> <sophy> 2.4.2 </version> </sependency> <!-Spring-Aop Dependency-> <rependency> <roupiD> org.aspectj </roughid> <StifactId> sidejweaver </sollingid> <splement> 1.8.2 </version> <StifactId> commons-filepload </artifactId> <الإصدار> 1.3.1 </version> </sependency> <!-mysql-> <reperence> <roupiD> mysql </rougeid> <StifactID> mysql-connector-java </artifactid> <Rependency> <roupency> com.alibaba </rougiD> <StifactId> druid </stifactid> <الإصدار> 1.0.11 </version> </sependency> <!-mybatis-> <redence> <sebatis> org.mybatis </groupid> </reperency> <reperency> <roupiD> org.mybatis </rougiD> <intifactid> mybatis-spring </stifactid> <erse> $ {mybatis.spring.version} </version> </premited> <! <SnifactId> mybatis-generator-core </intifactid> <الإصدار> 1.3.2 </version> <scope> ترجمة </scope> <اختياري> صواب </اختياري> </reperency> <! <sophy> $ {pagehelper.version} </version> </sependency> <!-General Mapper-> <reperency> <roupiD> tk.mybatis </rougeid> <StifactId> mapper </stifactid> <splex> $ {mapper.version} </version> <sperency> <StifactId> commons-lang3 </artifactId> <الإصدار> 3.3.2 </version> </rementency> </rependencies> <RependencyManagement> <تبعية> <reperence> <roupiD> org.springframework </groupiD> <scope> استيراد </scope> </sependency> </sependency> </sependency> </remebencyManagement> <spositories> <ropository> <id> nexus </id> <ame> nexus private المحلي </name> <Url> </reedease> <slatshots> <تمكين> خطأ </enileded> </snapshots> </ropository> <ropository> <id> sonatype-nexus-releases </id> <ame> sonatype nexus resease </mame> <Url> http://oss.sonatype.org/content/content </url> <Tuper> true </enileded> </reeases> <spleshots> <تمكين> خطأ </enabled> </snapshots> </sropository> <ropository> <id> sonatype-nexus-snapshots </id> <ame> sonatype nexus snapshots </name> <Url> http://oss.sonatype.org/content/repositories/snapshots </url> <reedease> <enabled> false </upository> </repository> <//endabling> </enable> true </tenable> <ProwEd> org.apache.maven.plugins </rougiD> <StifactId> maven-compiler-plugin </artifactId> <الإصدار> 3.2 </version> <nuction> <source> 1.7 </ource> <target> 1.7 </target> </configuration> </plugin>ApplicationContext.xml
<؟ xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: p = "http://www.springframework.org/schema/p" http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springfframework.org/schema/ http://www.springframework.org/schema/context/spring-context-3.0.xsd <!-مسح حزمة التكوين-> <السياق: مكون-المستحكم في القاعدة-"com.krry"> < /سياق: مكون-سكان> <!-استيراد ملفات الموارد الخارجية-> <السياق: property-placeholder location = "classpath: jdbc.properties" /> <! <property name = "driverClassName" value = "$ {db.driver}" /> <property name = "url" value = "$ {db.url}" /> <property name = "username" value = "$ {db.username}" /> <property name "value =" $ {db.password} id = "txmgr"> <property name = "dataSource" ref = "datasource"> </property> </bean> <!-تمكين برنامج تشغيل شرح المعاملات-> <tx: معاملة معاملات تعليمية QUARAGERATION = "txmgr"/> <! name = "dataSource" ref = "datasource"/> <property name = "configlocation" value = "classpath: mybatis-config.xml"> </splyment> <property name = "typealiasespackage" value = "com.krry.entity"/> <property name = "armins> <bial> <bialiasesage". إذا كنت لا تفهمه ، فيجب عليك إزالة التكوين التالي-> <property name = "properties"> <value> </value> </borperal> </boan> </ray> </sorterperation> </bean> <!-يمكن للتكوين أن يفحص الماسح الضوئي الذي يمكنه مسح mapper ككل-> <! value = "com.krry.mapper"> </property> <property name = "sqlsessionfactorybeanname" value = "sqlsessionfactory"> </perty> </bans>mybatis-config.xml
<؟ name = "cacheenable" value = "true" /> <!-قم بإيقاف تشغيل التحميل الفوري للكائن المرتبط بالأداء-> <setting name = "lazyloadingenabled" value = "true" /> <!-اضبط نموذج تحميل الكائن المرتبط. فيما يلي حقل تحميل عند الطلب (يتم تحديد حقل التحميل بواسطة SQL). لن يتم تحميل جميع حقول الجدول المرتبط بتحسين الأداء-> <الإعداد name = "aggressivelazyloading" value = "false" /> <!-للاستعلامات غير المعروفة SQL ، يُسمح بإعادة مجموعات النتائج المختلفة لتحقيق تأثير مشترك-> <setting name = "multipleresultsensable" value = "true" /> <!-السماح لاستخدام قيم المفاتيح الأساسية المخصصة (مثل ترميز UUID 32 بت الذي تم إنشاؤه بواسطة البرنامج كقيم رئيسية) ، وسيتم كتابة استراتيجية توليد PK لجدول البيانات بشكل مفرط-> <STETTER NAME = "usegeneratedkys" value = "true" /> <! <!-ذاكرة التخزين المؤقت SQL لعمليات تحديث الدُفعات لتحسين الأداء-> <Setting Name = "DefaultExecutortype" value = "batch" /> <!-timeout إذا لم تستجب قاعدة البيانات لأكثر من 25000 ثانية-> <إعداد name = "defaultStatementTimeOut" value = "25" value = "equals ، clone ، hashcode ، toString"/> </settings> <typealias> <!-الاسم المستعار لكائن المستخدم المخصص-> <!-<typealias type = "com.krry.mybatis.sysmanage.entity.user" alias = "user"/>-! </configuration>
springmvc.xml
<؟ xmlns: p = "http://www.springframework.org/schema/p" XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframeworg http://www.springframework.org/schema/util http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <! formattingConversionserviceFactoryBean-> <mvc: تحركه التعليقات التوضيحية> <mvc: الرسائل-سجلات التسجيل = "true"> <bean> <property name = "supportedediatepes"> <list> text/cla <bean/> <bean/> <bean> <boan> <property name = "precixjson" value = "false"/> <property name = "objectmapper"> <bean> <! </property> <!-لا يتم عرضه عندما يكون الحقل فارغًا-> <property name = "serializationInclusion"> <value type = "com.fasterxml.jackson.annotation.jsoninclude.includ <Value> application/json ؛ charset = utf-8 </value> <value> application/x-www-form-urlencoded ؛ charset = utf-8 </value> </list> </propert base-package = "com.krry.controller"> </context: component-scan> <!-يجب ضبط الوصول إلى ملفات الموارد الثابتة ، لأنه في تكوين springmvc ، سيتم حل جميع الطلبات (. <!-<mvc: default-servlet-standler //>-> <mvc: الموارد mapping = "/resource/**" site = "/resource/"/> <!-عرض تقديم JSP/freemaker/velocity-> <bean> <!-إنشاء مسار إلى تخزين الصفحة-> name = "FASEIX" value = "
لا تحتاج إلى عرض JDBC.Properties و log4j.properties ، فهي نفسها تقريبًا
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_2_5.xsd" <splay-name> maven_pageHepler </display-name> <-list-file-lister> <lisp-file> index/index </iship-file> </siff-file-lister> <context-param> <Param-Name> contextConfiglocation </arm-name> <StaNerer-Class> org.springframework.web.context.contextloaderListener </stanterer-class> </stanter> <stanker> <stanker-class> org.springframework.web.util.IntrospectorcleannueListener </staneer-class> </stanker> <bilter-name> <Filter-Class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <Init-param> <param-name> الترميز </param-name> <param-value> utf-8 </parm-value> <Url-pattern>/*</url-pattern> </filter-mapping> <vishlet> <Sradlet-Name> maven_pageHepler </servlet-name> <Sradlet-Class> org.springframework.web.servlet.dispatcherservle <Param-value> classpath: springmvc.xml </param-value> </IPT-PARAM> </servlet> <Sradlet Mapping> <Sradlet-Name> maven_pagehepler </servlet-name> <Url-pittern>/index/index </url-pattern> </servlet mapping> <Sradlet-Name> maven_pageHepler </servlet-name> <url-pattern>/</url-pattern> </revlet-mapping> </web-app>
فئة الكيان: Country.Java
package com.krry.entity ؛ public clant country { / *** key key* / private integer id ؛ / *** name*/ private String CountryName ؛ / *** Code*/ Private String CountryCode ؛ البلد العام (INTEGER ID ، String CountryName ، String CountryCode) {this.id = id ؛ this.countryName = CountryName ؛ this.countryCode = CountryCode ؛ } / *** احصل على المفتاح الأساسي** @معرف العودة - المفتاح الأساسي* / integer public getId () {return id ؛ } / *** تعيين المفتاح الأساسي** param id key key* / public void setId (integer id) {this.id = id ؛ } / *** الحصول على الاسم** regurn CountryName - name* / public string getCountryName () {return CountryName ؛ } / *** set name** param countryname name* / public void setCountryName (String CountryName) {this.countryName = CountryName ؛ } / *** احصل على رمز** regurn CountryCode - رمز* / سلسلة عامة getCountryCode () {return CountryCode ؛ } / *** SET CODE** PARAM CONTRALCODE CODE* / public void setCountryCode (String CountryCode) {this.countryCode = CountryCode ؛ }}params.java
package com.krry.entity ؛/** * * params * author krry * version 1.0.0 * */public class params {private integer pagesize = 10 ؛ عدد صحيح pageno = 0 ؛ عدد صحيح عام getPageno () {return pageno ؛ } public void setPageno (integer pageno) {this.pageno = pageno ؛ } integer getPagesize () {return pagesize ؛ } public void setPagesize (integer pagesize) {this.pagesize = pagesize ؛ }} طبقة الثبات: CountryMapper.java
package com.krry.mapper ؛ import java.util.list ؛ import com.krry.entity.country ؛/** * * * mapper: تشغيل database * author krry * @version 1.0.0 * */public interface CountryMapper {/** * query * params * return */public list <trower> finds () ؛ / ** * حساب * com.krry.dao.admin * الأسلوب الاسم: countblogs * author krry * param params * return int * exception * since 1.0.0 */ public counts () ؛ } CountryMapper.xml
<؟ <!-استعلام ترقيم الصفحات-> <select id = "find" resultType = "Country"> SELECT ID ، CountryName ، CountryCode from Country </select> <!-Query Quary the Number of Blogs-> <select id = "counts" resulttype = "long"
واجهة طبقة العمل:
package com.krry.service ؛ استيراد java.util.hashmap ؛ استيراد java.util.list ؛ استيراد javax.servlet.http.httpservletrequest ؛ import org.ibate.annotations.param ؛ استيراد com.github.pagehelper.pageinfo ؛ com.krry.entity.params ؛/** * طبقة الخدمة: التعامل مع منطق العمل (تم تنفيذه في INSL) * Author Asusaad * */واجهة عامة IcountryService {/** * Query Pagination لجميع المدونات * param paginal pagination pageno (رقم الصفحة) ، pageizize (pageize in page) الاكتشافات (params params) ؛ / ** * احسب عدد المدونات * param params * @REGANT */ public counts () ؛ } فئة تنفيذ طبقة الأعمال
package com.krry.service.impl ؛ استيراد java.util.hashmap ؛ استيراد java.util.list ؛ استيراد org.springframework.beans.factory.annotation.autowired com.github.pageHelper.pageHelper ؛ import com.github.pageHelper.pageInfo ؛ import com.krry.entity.country ؛ import com.krry.entity.params ؛ eystr ASUSAAD * */ @servicepublic class conditerments icountryService {AUTowired private CountryMapper CountryMapper ؛ /*** Query*/public pageinfo <Tearny> find (params params) {// query int pageno = params.getPageno () ؛ int pagesize = params.getPagesize () ؛ pagehelper.startPage (Pageno ، pagesize) ؛ قائمة <Curry> blogs = CountryMapper.finds () ؛ // لف النتيجة مع pageInfo pageInfo <Tearric> pageInfo = new pageInfo <Tearnfo> (المدونات) ؛ إرجاع pageinfo ؛ } / ** * حساب * param params * regurn * / public counts () {long couts = countrymapper.counts () ؛ إرجاع couts }} طبقة التحكم: KrryController.java
package com.krry.controller ؛ استيراد java.util.arraylist ؛ استيراد java.util.hashmap ؛ استيراد java.util.list ؛ استيراد org.junit.test ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.Springframework.stereOtpeOty.Controller ؛ org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.responsebody ؛ import org.springframework.web.servlet.modandelandview ؛ com.krry.entity.params ؛ import com.krry.service.icocom. ** * krryController * طبقة وحدة التحكم ، تم إعادة توجيهها كطلب * @author asusaad * */ @controller // تعني أنه نمط multi-case ، وطبقة الويب التي تم إرجاعها بواسطة كل مستخدم مختلف @requestmapping ( IcountryService Countryerervice ؛ /*** الصفحة الرئيسية ، واستعلام ترقيم الصفحات* return*/ @requestmapping ("/index") فهرس النموذج العام (params params) {modelandview modelandview = new modelandview () ؛ // أولاً الصفحة الأولى ، الاستعلام 10 params.setPageno (1) ؛ params.setpagesize (10) ؛ pageInfo <Townery> pageInfo = constryservice.finds (params) ؛ قائمة <Towner> clist = pageInfo.getList () ؛ // كمية الاستعلام الطويل couts = constryservice.counts () ؛ modelandview.addobject ("clist" ، clist) ؛ modelandview.addobject ("couts" ، couts) ؛ modelandview.setViewName ("index") ؛ إرجاع ModelandView ؛ }/** * استعلام ترقيم الصفحات لطلب AJAX * param params * return */responsebody @requestmapping ("/loadData") hashmap العامة <string ، object> loadData (params params) {hashmap <string ، Object> map = new hasmap <string ، object> () ؛ pageInfo <Townery> pageInfo = constryservice.finds (params) ؛ قائمة <Towner> clist = pageInfo.getList () ؛ map.put ("clist" ، clist) ؛ خريطة العودة } //}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.