MyBatisのフレームワークでは、遅延ロード、さらには違い、テーブルのクエリ

1.プライマー     

主に1および1対多の関係などの特性の複合エンティティ・クラスのデータ・タイプに使用MyBatisの遅延読み込み、。プロパティのこの種は、多くの場合、別のデータテーブルに対応しており、需要は必ずしもオンデマンドでロードされた目的を達成するために、そしてに関してロード・テーブル・クエリ内の時間遅延も大きな利点を持っているために、実際のクエリデータテーブルを必要としません。このコストは、アクセス速度を向上させる上で大きな意義を持っており、システムリソースを減らします。

2.ダブルテーブルクエリ

背景:ユーザエンティティクラスが文字ユーザロールエンティティクラス属性が含まれています

Userエンティティクラス属性

    プライベート整数ID; // ID 
    プライベート文字列のUSERCODE; // ユーザーコード
    プライベート文字列のuserName; // ユーザー名
    プライベート文字列のuserPassword; // ユーザーのパスワード
    プライベート整数USERROLE; // 関連付けられたユーザーIDフィールドの役割、およびロールテーブルsmbms_roleは、対応する
    プライベートロールロール; // 間の1対1の対応
    のプライベート整数性別; // セックス
    プライベート日誕生日; // 生年月日
    プライベート文字列電話; // 電話
    プライベート文字列のアドレス; // アドレス
    プライベート文字列userRoleName; // ユーザの役割名
    プライベート整数CREATEDBY; // の生みの親
    プライベート日のCreationDate; // 時間を作成する
    プライベート整数modifyBy; // によって更新された
    プライベート日付ModifyDate; // 更新時間

エンティティクラスの属性の役割、

  プライベート整数は、上記のIDを述べた; // 上記のIDに述べた
    
    プライベート文字列roleCodeを; // 文字をエンコードする
    
    プライベート文字列のroleNameを; // ロール名
    
    プライベート整数CREATEDBY; // の生みの親
    
    プライベート日のCreationDate; //は時間を作成する
    
    プライベート整数modifyBy; // によって更新された
    
    プライベート日付ModifyDate ; // 更新

 

XML SQL文のマッピングファイル

<! - 演示一对一会的连表查询スタート- > 

    < このresultMap タイプ= "役割" ID = "ロールマップ" > 
        < のid プロパティ= "ID" = "R_ID"  /> 
        < 結果プロパティ= "roleCode " =" roleCode "  /> 
        < 結果プロパティ= "のroleName" カラム= "のroleName"  /> 
    </ このresultMap > 
    < このresultMap タイプ= "ユーザー" ID ="userRoleResult」 > 
        < のid プロパティ= "ID"カラム= "ID"  /> 
        < 結果プロパティ= "USERCODE" カラム= "USERCODE"  /> 
        < 結果プロパティ= "userNameに" カラム= "userNameに"  /> 
        < 関連のプロパティ= "ロール" のJavaType = "ロール" このresultMap =」ロールマップ」 /> 
    </ このresultMap > 
    <! - 根据用户表中角色ID和角色表做联表查询- > 
    < 選択のid = "getUserListByRoleId" のParameterType = "int型"このresultMap = "userRoleResult" >
        * Uを選択し、R_IDとしてr.id、r.roleCode、r.roleNameから
        smbms_user 
        Uを、smbms_role R 
        u.userRole =#{userRoleId}とu.userRoleは= r.id 
    </ 選択> 

<! - 演示一对一会的连表查询終了- >

 試験方法

  @Test
     公共 ボイドselectUserByIdsAndRoleId()
    { 
        リスト <ユーザー>ユーザー= sqlSession.getMapper(UserMapper。クラス).selectUserByIdsAndRoleId(3、は、Arrays.asList(4,3、7,12 ))。
        (ユーザuserElement:ユーザ)
        { 
            のSystem.out.println(userElement)。
        } 
    }

 

 3.遅延ロード

レイジーローディングがメインの設定ファイルMyBatisの-config.xmlで構成することができ、ここでの設定はグローバル設定、デフォルトの遅延読み込みプロセスは、すべてのクエリのSQLです。

< 設定> 
<! - 遅延ロードを有効にします- > 
< 設定= "lazyLoadingEnabled" = "trueに"  /> 
<! - クローズ積極的にロードされた- > 
< 設定= "aggressiveLazyLoading" = "false"を / > 
</ 設定>

 

また、グローバルに満足の構成は、収集したり、特定のSQL文のマッピングで属性assocationタグfetchType =「遅延」(遅延ローディング)又はfetchType =「イーガー」(即時荷重)を追加するために添加され得る場合、

グローバルコンフィギュレーションのSQLここカバーSQL負荷をロード、擬似コード

< コレクション・プロパティ= "アドレスリスト"  
ofType = "アドレス" = "ID" 
    fetchType = "怠惰|熱望して" />

 

 

マッピングコードのXML SQL

    
<! - 演示一对多コレクション   - > 
    < このresultMap タイプ= "ユーザー" ID = "userAddressResult" > 
        < のid プロパティ= "ID" = "ID"  /> 
        < 結果プロパティ= "ユーザーコード" = "USERCODE "  /> 
        < 結果プロパティ="電話」カラム= "電話"  /> 
        < 結果プロパティ= "userNameに" カラム= "userNameに"  /> 
        <コレクション・プロパティ=「アドレスリスト」ofType= "アドレス" = "上記のID" 
            SELECT = "lazyFindAddressListByUserId" fetchTypeは= "怠惰" /> 
    </ このresultMap > 
    <! - 遅延デマンド負荷SQL文(つまり、このSQLを使用することはできません)- > 
    < SELECTは、上記のid = "lazyFindAddressListByUserId" のParameterType = "INT" resultTypeと= "アドレス" > 
        SELECT *はuserId IDからsmbms_address =#{} 
    </ SELECT > 
    <! - IDは、ユーザによるユーザ複数のアドレスを取得する- > 
    < SELECT ID = "getAddressListByUserId"ParameterType = "整数"
        このresultMap = "userAddressResult" > 
    SELECT * FROM smbms_userからここID =#{にuserId} 
    </ 選択>

 

 試験方法のAddressListアドレス情報を使用していません

@Test
     公共 ボイドgetAddressListByUserId()
    { 
        リスト <ユーザー>ユーザー= sqlSession.getMapper(UserMapper。クラス).getAddressListByUserId(5 )。
        (ユーザuserElement:ユーザー)
        { 
          // 不使用アドレスリスト属性 
             のSystem.out.println(userElement.getPhone()+」「+ userElement.getUserCode())。
           //    するSystem.out.println(userElement)。
        } 
    }

 コンソールは、実際には、唯一の1つのSQL文を表示し、ユーザだけがテーブルを照会します

 

 試験方法のAddressListアドレス情報を使用して

@Test
     公共 ボイドgetAddressListByUserId()
    { 
        リスト <ユーザー>ユーザー= sqlSession.getMapper(UserMapper。クラス).getAddressListByUserId(5 )。
        (ユーザuserElement:ユーザー)
        { 
            // 使用アドレスリスト属性
             // するSystem.out.println(userElement.getPhone()+」「+ userElement.getUserCode())。
            System.out.println(userElement)。
        } 
    }

 コンソールは、アドレステーブルを照会するだけで2つのSQL文で、実際には、唯一の最初のクエリ、ユーザーテーブル、そしてユーザIDを表示します

 

おすすめ

転載: www.cnblogs.com/gocode/p/lazyload-and-join-query-in-mybatis.html