SpringBoot MyBatisの多くのページングの問題がPageHelperを使用して解決しました

  一般的な使用では  PageHelper  、問題のページネーションのほとんどを解決するための庭のブログの関連用途を探索することができます、あなたは多くの情報を見つけることができます。

  SpringBootプロジェクトをやったときに、私は、このような問題が発生する前に、それはケースが多く、ユニオンクエリをページングする場合、使用PageHelperは、ページ上で行うことはできませんが、クエリ結果のページを行うこと。

  その後、多ページング関節問い合わせに応じて使用PageHelperを発見し、関連情報を検索した後、この方法は、ネストされたサブクエリであるので、効果は、結果をページング必要とされています。

  関連するコードはここに、メモを、それを記録しています。

  ここでの一般的な例は、MySQLデータベース内の2つの対応するテーブルの確立を商品や商品の情報を使用して、

CREATE  TABLE `item`(
  ` item_id` BIGINT20NOT  NULL AUTO_INCREMENTがCOMMENT ' 商品コード' 
  `img_url` VARCHAR500NOT  NULL  DEFAULT  '' COMMENT ' 画像アドレス' 
  ` title` VARCHAR1000NOT  NULL COMMENT ' タイトル' 
  `price` VARCHAR500NOT  NULLCOMMENT ' 価格' 
  `item_type` VARCHAR30にNOT  NULL COMMENT ' カテゴリ' 
  ` quantity` BIGINT20は、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` BIGINT20NOT  NULL AUTO_INCREMENTコメント' 规格ID ' 
  'item_id` VARCHAR30NOT  NULL COMMENT ' 商品ID ' 
  `sku_price`のVARCHAR100NOT  NULL  DEFAULT  '' COMMENT ' SKU价格' 
  `sku_unique_code` VARCHAR100NOT  NULLCOMMENT ' 仕様一意識別子' 
  'quantity` BIGINT20である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は結果をページアウトされます。出て行くと、コントローラによって返された結果を参照してください✿

おすすめ

転載: www.cnblogs.com/levywang/p/mybatis_one2many.html