数日前、私はここで手書きのSQLページネーションクエリによるページングの実装を共有しました。それでは、MyBatis Paging Plugin PageHeplerを使用してページングを実装することを見てみましょう。
ページングプラグインを使用する理由は、SQLコードの書き込みを簡素化し、より良い物理ページングを実現することです。これは、完全なページングSQLコードを書くよりもエラーを減らすことができます。
MyBatisページングプラグインデモプロジェクトアドレス:free-mybatis_pagehelper_jb51.rar
ここでMavenプロジェクトの実装を使用しています:
1.最初に、ページングプラグインの依存関係をインポートします。
<Dependency> groupId> com.github.pagehelper </groupid> <artifactid> pagehelper </artifactid> <version> 5.0.0 </version> </dependency>
2。ページングインターセプタープラグインを構成します
公式文書用の2つの構成ページインターセプタープラグインがあります
1. MyBatis構成XMLでインターセプタープラグインを構成します
<! - 構成ファイルのプラグインの場所は要件を満たす必要があります。そうしないと、エラーが報告されます。注文は次のとおりです。プロパティ?、設定?、型耳オースメアーズ?、タイプハンドラー?、オブジェクトファクター?、オブジェクトワッパーファクトリー?、プラグイン?、環境?、環境?、データベースディードプロバイダー?、マッパー> <! interceptor = "com.github.pagehelper.pageInterceptor"> <! - 次の方法を使用してパラメーターを構成すると、後で紹介されるすべてのパラメーターがあります - > <プロパティ名= "param1" value = "value1"/> <
2。スプリング構成ファイルでインターセプタープラグインを構成します
Springの属性構成方法を使用して、プラグイン属性を使用して次のように構成できます。
<bean id = "sqlsessionfactory"> <! - 他の構成に注意してください - > <プロパティ名= "プラグイン"> <array> <bean> <プロパティ名= "プロパティ"> <! - パラメーターを構成します。
ここでは、プロジェクトの2番目のタイプを使用していますが、そのパラメーターは実際の状況に従って構成されているか、それらを構成できないように設定できます。
3。呼び出し方法
マッパーレイヤーSQLステートメントは、ページングを書くことなく、一般的なクエリメソッドに従って記述されます。
<! - ページネーションクエリ - > <select id = "sinds" resulttype = "country"> select id、countryname、country from country </select>
マッパーレイヤーインターフェイス:
/*** query* @param params* @return*/public list <country> find();
サービスサービスレイヤーインターフェイス:
/ ** *ページネーションクエリ * @param paramsページネーションパラメータpageno(ページ番号)、pagesize(ページごとのクエリ数) * @return */ public pageinfo <country> find(params params);
サービスビジネスレイヤーの実装クラス:pagehelper.startpage(1、10);最初のパラメーターはどのページを示し、2番目のパラメーターは各ページに表示されるレコードの数を示します
pagehelper.startpage(1、10)を実行した後;ステートメント、次の最初の選択メソッドは普及します。
次に、PageInfoを使用してクエリの結果をラップします、pageinfo <country> pageinfo = new pageinfo <country>(blogs);
PageInfoを制御層に返します
/*** query*/public pageinfo <country> finds(params params)// query int pageno = params.getpageno(); int pagesize = params.getPagesize(); pagehelper.startpage(pageno、pagesize); List <Country> blogs = countrymapper.finds(); // pageinfo <country> pageinfo = new PageInfo <Country>(blogs)で結果をラップします。 pageinfoを返します。 }
ここでpageInfoを返した後、パラメーションページネーションパラメーターを渡し、コントローラーレイヤーでpageinfoを解析します。
リスト<Country> clist = pageinfo.getList();次に、握りを範囲に入れ、<c:foreach> </c:foreach>を使用してページングデータ/***ホームページを取得し、ページネーションクエリ* @return*/@RequestMapping( "/index")パブリックモデルアンドビューインデックス(パラメーションパラメーション){ModelandView ModelAndView = New ModelandView(); //最初のページ、クエリ10 params.setpageno(1); params.setPagesize(10); pageinfo <country> pageinfo = countryservice.finds(params);リスト<Country> clist = pageinfo.getList(); //クエリの数量long couts = countryservice.counts(); modelandview.addobject( "clist"、clist); modelandview.addobject( "couts"、couts); modelandview.setViewName( "index"); ModelandViewを返します。 }上記はすべて、キーページの実装コードです。ここで、すべての構成と実装のコードを見てください。
pom.xml
<プロジェクトXMLNS:XSI = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://maven.apache.org/pom/4.0.0" XSI:Schemalocation = "http://maven.apach. http://maven.apache.org/maven-v4_0_0.xsd "> <modelversion> 4.0.0 </modelversion> <groupid> com.krry </groupid> <artifactid> maven_pagehepler_ora </artifactid> <パッケージ<name> maven_pagehepler_ora </name> <url> http://maven.apache.org </url> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <! - mybatisジェネレーター-> <! <TARGEJAVAPROJECT> $ {beadir}/src/main/java </targetjavaproject> <TARGEMMAPPERPACKAGE> com.isea533.mybatis.mapper </targetModelPackage> <TARGEMODELPACKAGE> com.isea533.mybatis.model </genational </genational < <TARGERESOURCESPROJECT> $ {BEDISIR}/SRC/MAIN/RESOUNCES </TARGENRESOURCESPROJECT> <TARGEXMLPACKAGE> MAPPE </TARGENXMLPACKAGE> <! - compile jdkバージョン - > <jdk.version> 1.6 </jdk.version> < <mapper.version> 3.3.6 </mapper.version> <pagehelper.version> 5.0.0 </pagehelper.version> <mysql.version> 5.1.29 </mysql.version> <spring.version> 4.1.2.release </spring.version> <mybatis.spring.version> 1.2.4 </mybatis.spring.version> </properties> <dependencies> <dependency> <expendency> <groupid> junit </groupid> <artifactid> junit </artifactid> <バージョン> 4.11 </バージョン> <スコープ>テスト</スコープ> < <artifactid> log4j </artifactid> <バージョン> 1.2.17 </version> </dependency> < <groupid> javax.servlet.jsp </groupid> <artifactid> jsp-api </artifactid> <version> 2.1 </version> <scope> <GroupId> Javax.Ws.RS </groupId> <Artifactid> javax.ws.rs-api </artifactid> <version> 2.0 </version> </dependency> <deprofency> javax.websocket </groupId> <artifactid> javax.webax.webax.deprency <GroupId> javax.Annotation </groupId> <Artifactid> javax.annotation-api </artifactid> <version> 1.2 </version> </dependency> <dependency> groupid> javax.transaction </groupId> <artifactid> javax.transaction-api < <Dependency> groupId> org.springframework </groupid> <artifactid> spring-context </artifactid> </dependency> <dependency> <groupid> org.springframework </groupid> <artifactid> spring-orm-orm </artifactid> </dependency <Artifactid> spring-oxm </artifactid> </dependency> <dependency> <groupid> org.springframework </groupid> <artifactid> </artifactid> </dependency> <依存関係<groupId> org.springframework </artifactid> </dependency> <dependency> <shipid> org.springframework </groupid> <artifactid> </artifactid> </dependency> <依存関係> <groupid> org.spramework < <groupid> org.springframework </groupid> <artifactid> spring-test </artifactid> </dependency> <! - spring-oxm依存関係 - > <依存関係> groupid> codehaus.castor </groupid> <artifactid> artifactid> castor-xml <依存関係 - > <依存関係> groupId> com.fasterxml.jackson.core </groupid> <artifactid> jackson-databind </artifactid> <version> 2.4.2 </version> </dependency> <ependency> com.fasterxml.jackson.dataformat </groupid> <artifactid> jackson-dataformat-xml </artifactid> <version> 2.4.2 </version> </dependency> <! - spring-aop依存関係 - > <依存関係> groupid> org.aspectj </groupid> <artifactid> aspectjweaver </artifactid> <groupId> commons-fileupload </groupid> <artifactid> commons-fileupload </artifactid> <バージョン> 1.3.1 </version> </dependency> <! - mysql-> <seplency> <groupid> mysql </groupid> <artifactid> mysclonconcentor-java </artifactid> <バージョン> $ {mysql.version} </version> </dependency> <! - druid - > <依存関係> groupid> com.alibaba </groupid> <artifactid> druid </artifactid> <バージョン> 1.0.11 </version> </dependency> < <Artifactid> mybatis </artifactid> <version> $ {mybatis.version} </version> </dependency> <dependency> <expendency> <groupid> org.mybatis </groupid> <artifactid> mybatis-spring </artifactid> <バージョン> $ {mybatis.spring.spring.spring> </</</< - > <依存関係> groupId> org.mybatis.generator </groupid> <artifactid> mybatis-generator-core </artifactid> <バージョン> 1.3.2 </version> <scope> compile </scope> <optional> true </optional> </depence> <! <artifactid> pagehelper </artifactid> <version> $ {pagehelper.version} </version> </dependency> <! - general mapper-> <依存関係> <groupid> mybatis </groupid> <artifactid> mapper </artifactid> <バージョン> $ {mapper.version} </</</</< <groupid> org.apache.commons </groupid> <artifactid> commons-lang3 </artifactid> <version> 3.3.2 </version> </dependency> </dependencymanagement> <dependency> <dependency> <groupid> org.spramewark </groupid> <artifactid> spring-framewort-bom> <バージョン> $ {spring.version} </version> <type> pom </type> <scope>インポート</scope> </dependency> </dependency> </dependency> </dependencymanagement> <repositories> <id> nexus </id> <name> local private </name> <url> http://maven.oschina.net/content/groups/public/ </url> <leleases> <enabled> true </enabled> </lileases> <snapshots> <Enabled> false </enabled> </snapshots> </repository> <id> <id> <id> <id> <id> <name> sonatype nexusリリース</name> <url> http://oss.sonatype.org/content/repositories/releases </url> <リリース> <Enabled> true </enabled> </lileases> <snapshots> <Enabled> <id> sonatype-nexus-snapshots </id> <name> sonatype nexus snapshots </name> <url> http://oss.sonatype.org/content/repositories/snapshots </url> <放出> <Enablead> </snapshots> </repository> </repository> </repository> </repository> </build> <plugins> org.apache.maven.plugins </groupid> <artifactid> maven-compiler-plugin </artifactid> <バージョン> </configuration> </plugin> </plugins> </build> </project>ApplicationContext.xml
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns:aop = "http://www.springframework.org/schema/aop" xmlns:context = "http://www.springframework.org/schema/tx" xmlns:util = " XMLNS:P = "http://www.springframework.org/schema/p" xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/spr-構成パッケージスキャン - > <コンテキスト:Component-Scanベースパッケージ= "com.krry"> < /context:component-scan> <! - 外部リソースファイルのインポート - > <コンテキスト:プロパティ - プレイスホルダーlocation = "classpath:jdbc.properties" /> <! - druidデータソースの構成 - > name = "driverclassname" value = "$ {db.driver}" /> <property name = "url" value = "$ {db.url}" /> <プロパティ名= "username" value = "$ {db.username}" /> <プロパティ名= "パスワード" value = " id = "txmgr"> <プロパティ名= "dataSource" ref = "dataSource"> </property> </bean> <! - トランザクションアノテーションドライバーを有効にする - > <tx:txmgr "/> <! - mybatis 'sqlsessionfactory-> <bean" sqlsosions name = "dataSource" ref = "dataSource"/> <プロパティname = "configlocation" value = "classpath:mybatis-config.xml"> </property> <property name = "typealiasespackage" value = "com.krry.entity"/> <Property name = "plucins">理解していない場合は、次の構成を削除する必要があります - > <プロパティ名= "プロパティ"> <値> <値> </value> </property> </bean> </array> </property> </bean> <! - 構成はマッパーをスキャンできるスキャナーをスキャンできます - > <bean> <! value = "com.krry.mapper"> </property> <property name = "sqlsessionfactorybeanname" value = "sqlsessionfactory"> </property> </beans>mybatis-config.xml
<?xml version = "1.0" encoding = "utf-8"?> <!doctype構成public " - // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" name = "cacheenabled" value = "true" /> <! - パフォーマンスのために関連するオブジェクトのインスタントロードをオフにします - > <name = "lazyloadingEnabled" value = "true" /> <! - 関連するオブジェクトのロードの形式を設定します。ここにオンデマンドの負荷フィールドがあります(負荷フィールドはSQLで指定されています)。関連するテーブルのすべてのフィールドは、パフォーマンスを改善するためにロードされません - > <設定名= "aggressivelazyloading" value = "false" /> <! - 不明なsqlクエリの場合、共通の効果を達成するために異なる結果セットを返すことができます - > <設定name = "MultipleresultsetsEnabled" value = "true" /> < value = "true" /> <! - カスタムプライマリキー値(プログラムによって生成されたUUID 32ビットエンコーディングなどのキー値として使用)を使用します。また、データテーブルのPK生成戦略は上書きされます - > <name = "usegeneratedkeys" value = "true" /> <! - full-aTtribute mapping " /" /" /" /">"> ottribute support ">" /> < <! - パフォーマンスを改善するバッチ更新操作のSQLをキャッシュする - > <name = "defaultexecutortype" value = "batch" /> <! - データベースが25,000秒以上応答しなかった場合 - > <> <"defaultstatementtimeout" value = "25" /> <設定nam </settings> <typealias> <! - カスタムユーザーオブジェクトのエイリアス - > <! - <typealias type = "com.krry.mybatis.sysmanage.user" airas = "user"/> - > <! - バッチ定義エイリアス - > <パッケージname = "com.krry.entity
springmvc.xml
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns:p = "http://www.springframework.org/schema/p" xmlns:context = "http://www.springframework.org/schema/util" xmlns:MVC = " xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www. http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd http://www.springframework.org/schema/mvc. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <! - アノテーションモードドライバーをオンにする - > <bean/> <! formattingConversionserviceFactoryBean - > <MVC:annotation-driven> <MVC:message-converters Register-Defaults = "true"> <bean> <Property name = "supportedmediatypes"> <balue> text/text/text/plain; charset = utf-8 </value> <value> html; charset = utf-8 </</<> <bean /> <bean /> <bean> <bean> <bean name = "precixjson" value = "false" /> <objectmapper "> <bean> <! - 応答ボディの日付タイプを処理 - > <プロパティname =" dateformat "> <bean> <construction-arg type =" </bean> </property> <! - フィールドがnullの場合に表示されません - > <プロパティ名= "serializationinclusion"> <value type = "com.fasterxml.jackson.annotation.jsoninclude.include" <value> application; charset = utf-8 </value> <value> application/x-www-form-urlencoded; charset = utf-8 </value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> < base-package = "com.krry.controller"> </context:component-scan> <! - springmvc構成では、すべてのリクエスト(.do、adduser、JS/image/css)は、springmvcによってすべてのリクエスト(。 <! - <MVC:デフォルトセルバーハンドラー//> - > <MVC:リソースマッピング= "/リソース/**"/** "/**"/** "/"/> <! - レンダリングjsp/freemaker/velocity-> <bean> <! - ページストレージへのパスを作成 - > <プロパティname = "/web-inf/< name = "suffix" value = "。jsp"> </property> </beans>
jdbc.propertiesとlog4j.propertiesを表示する必要はありません、それらはほとんど同じです
web.xml
<?xml version = "1.0" encoding = "utf-8"?> <web-app xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/nns/javaee xsi:schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/ns/javaee/web-app_55.55.5.xsd" 2.5 "> <display-name> maven_pagehepler </display-name> <welcome-file-list> <welcome-file> index/index </welcome-file> </welcome-filelist> <context-param> contextconfiglocation </param-name> <param-value> classpath:applicationContext.xml <リスナークラス> org.springframework.web.context.contextloaderlistener </ristener-class> </ristener> <リスナー> <リスナークラス> org.springframework.util.introspectorcleanuplistener </リスナー</リスナー> <felter> <フィルター> <フィルター> <filter-class> org.springframework.web.filter.characterencodingfilter </filter-class> <init-param> <param-name>エンコード</param-name> <param-value> utf-8 </param-value> </init-param> </filter> <filter-name> <filter-naming> <filter-naming <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name> maven_pagehepler </servlet-name> org.springframework.web.servlet.dispatcherservlet> </servlet-crass> <initparam> <param-name> <param-name> contermentconfiglocet <param-value> classpath:springmvc.xml </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name> maven_pagehepler </servlet-name> <url-pattern>/index/index/index/index/index/index/url-pattern> </servlet-mapping> <サーブレットマッピング> <サーブレットマッピング> <サーブレットマッピング<Servlet-Name> maven_pagehepler </servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
エンティティクラス:country.java
パッケージcom.krry.entity; public class country { / ***プライマリキー* / private integer id; / *** name*/ private string countryName; / *** code*/ private string countrycode;公共国(整数ID、String CountryName、String CountryCode){this.id = id; this.countryname = countryName; this.countrycode = countrycode; } / ***プライマリキーを取得** @return id -primary key* / public integer getId(){return id; } / ***プライマリキーを設定** @param idプライマリキー* / public void setid(integer id){this.id = id; } / *** get name** @return countryName -name* / public string getCountryName(){return countryName; } / *** set name** @param countryName name* / public void setCountryName(string countryName){this.countryName = countryName; } / *** get code** @return countrycode -code* / public string getCountryCode(){return CountryCode; } / *** set code** @param countrycode code* / public void setCountryCode(string countrycode){this.countryCode = countryCode; }}params.java
パッケージcom.krry.entity;/** * * params * @author krry * @version 1.0.0 * */public class params {private integer pagesize = 10;プライベート整数pageno = 0; public Integer getPageno(){pagenoを返します。 } public void setpageno(integer pageno){this.pageno = pageno; } public Integer getPagesize(){return pagesize; } public void setPagesize(integer pagesize){this.pagesize = pagesize; }}永続レイヤー:countrymapper.java
パッケージcom.krry.mapper; import java.util.list; import com.krry.entity.country;/** * * mapper:operate database * @author krry * @version 1.0.0 * */public interface countrymapper {/ * * * query * @return */public liest <country fiend); / ** *計算 * com.krry.dao.admin *メソッド名:countblogs * @author krry * @param params * @return int * @exception * @since 1.0.0 */ public counts(); } countrymapper.xml
<?xml version = "1.0" encoding = "utf-8"?> <!doctype mapper public " - // mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" <! - ページネーションクエリ - > <id = "select id =" find "resulttype =" country "> select id、countryname、countrycode from country </select> <! - queryブログの数をクエリ - > <select id =" counts "longtype =" long "> select count(*)country </select> </mapper>
ビジネスレイヤーインターフェイス:
パッケージcom.krry.service; import java.util.hashmap; import java.util.list; import javax.servlet.http.htttpservletrequest; import org.apache.ibatis.annotations.Annotations.param; import com.github.pagehelper.pageinfo; import com.krry.entity.params;/** *サービスレイヤー:ハンドルビジネスロジック(実装emplに実装) * @author asusaad * * */public interface icountryservice {/** *すべてのブログのページネーションクエリparams); / ** *ブログの数を計算 * @param params * @return */ public long counts(); }ビジネス層の実装クラス
パッケージcom.krry.service.impl; import java.util.hashmap; Import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.sterteototye.service; import org.springframework.web.servelet.modebie com.github.pagehelper.pagehelper; import com.github.pagehelper.pageinfo; import com.krry.entity.country; Import com.krry.entity.params; import com.krry.mapper.countrymapper; import com.krry.service.service.service.service.service.service.service.service.service.service.service.service.service.service.service.service.service.service.service.service.service.service.service.servace asusaad * */ @servicepublic countryserviceはiCountryService {@autowired private Countrymapper Countrymapperを実装しています。 /*** query*/public pageinfo <country> finds(params params){// query int pageno = params.getPageno(); int pagesize = params.getPagesize(); pagehelper.startpage(pageno、pagesize); List <Country> blogs = countrymapper.finds(); // pageinfo pageinfo <country> pageinfo = new pageinfo <country>(blogs)で結果をラップします。 pageinfoを返します。 } / ** * calculation * @param params * @return * / public long counts(){long couts = countrymapper.counts();コウトを返します。 }}制御層:krrycontroller.java
パッケージcom.krry.controller; import java.util.arraylist; import java.util.hashmap; import java.util.list; import org.junit.test; import org.springframework.beans.factory.annotation.autowired.Springframework.Spramework.spramework.spramework org.springframework.bind.annotation.requestmapping; Import org.springframework.web.bind.annotation.responsebody; Import org.springframework.web.servlet.modelandview; import com.github.pagehelper.pageinfo; import com.krry.Entiy.Entiinfo com.krry.entity.params; import com.krry.service.icocom。** * krrycontroller *コントローラーレイヤー、リクエストとして転送 * @author asusaad * */ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @controler // ICountryService CountryService; /***ホームページ、およびページネーションクエリ* @return*/@requestMapping( "/index")public modelandview index(params params){modelandview modelandview = new ModelandView(); //最初のページ、クエリ10 params.setpageno(1); params.setPagesize(10); pageinfo <country> pageinfo = countryservice.finds(params);リスト<Country> clist = pageinfo.getList(); //クエリの数量long couts = countryservice.counts(); modelandview.addobject( "clist"、clist); modelandview.addobject( "couts"、couts); modelandview.setViewName( "index"); ModelandViewを返します。 }/** * ajax requestのページネーションクエリ * @param params * @return */ @responsebody @requestmapping( "/loaddata")public hashmap <string、object> loaddata(params params){hashmap <string、object> object> map = new hashmap <string、object> hashmap>(); pageinfo <country> pageinfo = countryservice.finds(params);リスト<Country> clist = pageinfo.getList(); map.put( "clist"、clist);マップを返します。 } //}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。