一般的な使用では PageHelper 、問題のページネーションのほとんどを解決するための庭のブログの関連用途を探索することができます、あなたは多くの情報を見つけることができます。
SpringBootプロジェクトをやったときに、私は、このような問題が発生する前に、それはケースが多く、ユニオンクエリをページングする場合、使用PageHelperは、ページ上で行うことはできませんが、クエリ結果のページを行うこと。
その後、多ページング関節問い合わせに応じて使用PageHelperを発見し、関連情報を検索した後、この方法は、ネストされたサブクエリであるので、効果は、結果をページング必要とされています。
関連するコードはここに、メモを、それを記録しています。
ここでの一般的な例は、MySQLデータベース内の2つの対応するテーブルの確立を商品や商品の情報を使用して、
CREATE TABLE `item`( ` item_id` BIGINT(20)NOT NULL AUTO_INCREMENTがCOMMENT ' 商品コード' 、 `img_url` VARCHAR(500)NOT NULL DEFAULT '' COMMENT ' 画像アドレス' 、 ` title` VARCHAR(1000)NOT NULL COMMENT ' タイトル' 、 `price` VARCHAR(500)NOT NULLCOMMENT ' 価格' 、 `item_type` VARCHAR(30に)NOT NULL COMMENT ' カテゴリ' 、 ` quantity` BIGINT(20は)、NOT NULL COMMENT ' 数' 、 PRIMARY KEY ( `item_id`) )ENGINE = InnoDBのAUTO_INCREMENT =を。1 DEFAULT CHARSET = ROW_FORMATのUTF8 = COMPACT COMMENT = ' 貿易'。
CREATE TABLEを`item_sku`( ` sku_id` BIGINT(20)NOT NULL AUTO_INCREMENTコメント' 规格ID ' 、 'item_id` VARCHAR(30)NOT NULL COMMENT ' 商品ID ' 、 `sku_price`のVARCHAR(100)NOT NULL DEFAULT '' COMMENT ' SKU价格' 、 `sku_unique_code` VARCHAR(100)NOT NULLCOMMENT ' 仕様一意識別子' 、 'quantity` BIGINT(20である)NOT NULL COMMENT ' 数' 、 PRIMARY KEY ( `sku_id`) )ENGINE = InnoDBのAUTO_INCREMENT = 0 DEFAULT CHARSET = UTF8 ROW_FORMAT = COMPACT COMMENT = ' 商品のSKU '。
プロジェクトの新モデル関連のクラスおよびインタフェースとマッパーXMLファイル、XMLファイルにこのresultMapを追加
下記のプロパティフィールドの対応関係 <! - :プライベートリスト<ItemSku> itemSkusプロパティフィールドはフィールド名のリストに対応するitemSkusは、結果として焦点を当てる必要があります。- >
< このresultMap ID = "項目" タイプ= "com.demo.dal.entity.pojo.Item" > < 結果列は= "ITEM_ID" jdbcType = "VARCHAR" プロパティ= "のitemId" /> < 結果カラム= "img_url" jdbcType = "VARCHAR" プロパティ= "imgUrl" /> < 結果列= "タイトル" jdbcType = "VARCHAR" プロパティ= "タイトル" /> < 結果列= "価格"jdbcType = "VARCHAR" プロパティ= "価格"/> < 結果カラム= "ITEM_TYPE" jdbcType = "VARCHAR" プロパティ= "itemTypeに" /> < 結果カラム= "量" jdbcType = "BIGINT" プロパティ= "量" /> < コレクションプロパティ= "itemSkus" ofType =」 com.demo.dal.entity.pojo.ItemSku」 のJavaType = "java.util.Listに" 選択= "getSkuByItemId" カラム= "{のitemId = ITEM_ID}" > <!- SELECTフィールド{のitemId = ITEM_ID、量=数量 } クエリで親に照会される列- > <! -プロパティ字段对应的itemSkus必须在结果集中一覧的字段名如:プライベートリスト<ItemSku> itemSkus; - > < 結果の列は= "sku_id" jdbcType = "VARCHAR" プロパティ= "SKUID" / > < 結果カラム= "sku_price" jdbcType = "VARCHAR" プロパティ= "skuPrice" /> < 結果カラム= "sku_unique_code" jdbcType = "VARCHAR" プロパティ= "skuUniqueCode" /> < 結果カラム= "量" jdbcType =」BIGINT」 プロパティ= "量" /> </コレクション> </ このresultMap >
メインクエリ selectItemAndSku
< 選択ID = "selectItemAndSku" このresultMap = "項目" ParameterTypeが= "マップ" > SELECT s1.item_id、 s1.title、 s1.img_url、 s1.item_type、 s1.price、 s1.quantity、 FROM アイテムS1を < > < もしテスト= "タイトル!= nullのタイトル!= ''" > とs1.title LIKE '%の$ {タイトル}%' </ 場合> < もしテスト= "のitemId!= nullをとのitemId!= '「」 > AND s1.item_id = '$ {}のitemId' </ 場合> </ > ITEM_ID DESC順</ 選択>
ネストされたサブクエリ getSkuByItemId
< 選択ID = "getSkuByItemId" のParameterType = "マップ" resultTypeと= "マップ" > 選択s2.sku_id、 s2.sku_price、 s2.sku_unique_code、 s2.quantity、 item_skuからS2 ここ s2.item_id =#{}のitemId ORDER BY S2 .sku_id </ 選択>
これらが完了すると、新しいファイルには、インターフェイスマッパーこのような方法で追加されます。 リストの<item> selectItemAndSku(地図<文字列、オブジェクト>マップ);
次に、サービス実装クラスのインターフェイスクラスはマッパーに注入し、その後、ページングを接続するためにタブを使用することができます。
サンプルコード:
PageInfoの<item> pageInfo = PageHelper.startPage(ページ、pageSizeを) .doSelectPageInfo( () - > itemDao.selectItemAndSku(マップ); // JDK 8.0以上的语法 // リストの<item>リスト= PageHelper.startPage(ページ、pageSizeを); // itemDao.selectItemAndSku(マップ); // PageInfoの<item> pageInfo =新しいPageInfo <>(リスト); // 通用写法
pageInfoは結果をページアウトされます。出て行くと、コントローラによって返された結果を参照してください✿