ホームページ >Java >&#&チュートリアル >MyBatis の遅延読み込みサンプルの詳細な説明
1.遅延ロードとは
resultMapは高度なマッピングを実装できます(アソシエーションとコレクションを使用して1対1および1対多のマッピングを実現します)、アソシエーションとコレクションには遅延ロード機能があります。
要件:
注文をクエリし、クエリのユーザー情報を関連付ける場合。最初に注文情報を照会すると、ユーザー情報を照会する必要がある場合に、ユーザー情報を確認することができます。オンデマンドでのユーザー情報のクエリは遅延読み込みです。
遅延読み込み: 最初に単一テーブルからクエリを実行し、次に必要に応じて関連テーブルから関連クエリを実行します。これにより、単一テーブルのクエリの方が、複数のテーブルを関連してクエリするよりも高速になるため、データベースのパフォーマンスが大幅に向上します。
アソシエーションによる順序のクエリとユーザー情報のクエリ
2 つのマッパー メソッドに対応するステートメントを定義する必要があります。
(1) 注文情報のみをクエリ
SELECT * FROM order
注文をクエリするステートメントで関連付けを使用して、次のステートメント(ユーザー情報を関連付けクエリ)の読み込み(実行)を遅らせます。
<!-- 查询订单关联查询用户 --><select id="findOrdersUserLazyLoading" resultMap="OrdersUserLazyLoadingResultMap">SELECT * FROM orders</select>
(2) 関連付けによるユーザー情報のクエリ
上記でクエリした注文情報の user_id を使用してユーザー情報をクエリします
UserMapper.xml の findUserById を使用します
<select id="findUserById" parameterType="int" resultType="user">select * from user where id=#{value}</select>
必要な場合は、最初に findOrdersUserLazyLoading を実行します。ユーザーにクエリを実行し、fingUserById を実行し、resultMap の定義を通じて遅延読み込みの実行を構成します。
遅延ロードで実行するステートメントのIDを指定するには、selectを関連付けて使用します。
<!-- 延迟加载的resultMap --><resultMap type="joanna.yan.mybatis.entity.Orders" id="OrdersUserLazyLoadingResultMap"><!-- 1.对订单信息进行映射配置 --><id column="id" property="id"/><result column="user_id" property="userId"/><result column="number" property="number"/><result column="createtime" property="createtime"/><result column="note" property="note"/><!-- 2.实现对用户信息进行延迟加载 --><!-- select:指定延迟加载需要执行的statement的id(是根据user_id查询用户信息的statement) 要使用UserMapper.xml中findUserById完成根据用户id(user_id)用户信息的查询, 如果findUserById不在本mapper中需要前边加namespace。 column:订单信息中关联用户信息查询的列,是user_id 关联查询的sql理解为: SELECT orders.*, (SELECT username FROM USER WHERE orders.user_id = user.id)username, (SELECT sex FROM USER WHERE orders.user_id = user.id)sex FROM orders--><association property="user" javaType="joanna.yan.mybatis.entity.User"select="joanna.yan.mybatis.mapper.UserMapper.findUserById" column="user_id"></association></resultMap>E42.4Mapper.javarreee2.5 テスト2.5.1 テストのアイデア (1) Mapper メソッド (FindOrdersuserlazyloading) を実行し、findOrdersUserLazyLoading 内で Joanna.yan.mybatis.OrderscustomMapper を呼び出し、注文情報のみをクエリします (独身テーブル)。 (2) プログラム内で、前のステップでクエリされた List
説明 | 許可される値 |
デフォルト値 |
|
遅延読み込みをグローバルに設定します。 「false」に設定すると、関連するすべてのものが最初にロードされます。 「true」に設定すると、遅延ロードされたオブジェクトは遅延属性で完全にロードされる可能性があります。それ以外の場合、各プロパティはオンデマンドでロードされます。 |
true | false | true | |
//查询订单关联查询用户,用户信息时延迟加载public List<Orders> findOrdersUserLazyLoading() throws Exception;2.5.3 テストコード |
<!-- 全局配置参数,需要时再设置 --> <settings> <!-- 打开延迟加载的开关 --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 将积极加载改为消极加载即按需要加载 --> <setting name="aggressiveLazyLoading" value="false"/> </settings> 2. 遅延読み込みに関する 6 つの考え |
提供されていませんby mybatis アソシエーションとコレクションで遅延読み込みを実装するにはどうすればよいですか? 実装方法は以下のとおりです: | 2つのマッパーメソッドを定義します: (1) 注文リストをクエリします |
以上がMyBatis の遅延読み込みサンプルの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。