mybatis 多表关联查询 延迟查询

mybatis 多表关联查询 延迟查询

延迟查询就是将一次查询分成几次查询,当你调用时查询。

6.1多表查询SQL 语句的写法
6.1.1 连接查询
使用内连接或者外连接的方式查询数据。
优点:在一次查询中完成数据的查询操作。降低查询次数提高查询效率。
缺点:如果查询返回的结果集较多会消耗内存空间。
102
6.1.2 N+1 次查询
分解式查询,将查询分解成多个SQL 语句。
优点:配和着延迟加载可实现结果集分步获取,节省内存空间。
缺点:由于需要执行多次查询,相比连接查询效率低。
6.2N+1 查询的加载方式
6.2.1 立即加载
在一次查询中执行所有的SQL 语句。
6.2.2 延迟加载
在一次查询中执行部分SQL 语句,根据操作映射的关联象触发其他查询。

6.3MyBatis 的延迟加载的使用

在Mybatis 中可以使用延迟加载数据的策略实现对关联对象的查询。
使用延迟加载要求:
 查询方式需要使用N+1 次查询。
 在映射配置文件或者全局配置文件中开启延迟加载。
6.3.1 开启延迟加载
开启延迟加载方式:
 在<’association>、<‘collection>标签中通过fetchType 属性开启延迟加载,仅针对当前标签
生效。fectType:lazy 开启延迟加载,fectType:eager 开启立即加载。通过select 属性指定
需要执行的查询的ID。通过column 属性指定将封装查询结果对象的哪个属性的值作为
103
下一个查询的查询条件。
 在全局配置文件中的<’settings>标签中开启延迟加载,所有的association 和collection 元
素都生效。<’setting name="lazyLoadingEnabled" value="true"/>
 配置触发加载方法,lazyLoadTriggerMethods:指定实体对象的哪个方法触发一次加载。

6.3.2 修改全局配置文件配置触发方法

点击查看代码
<settings>
<setting name="lazyLoadTriggerMethods" value=""/>
</settings>

例子:
查询用户,当调用用户查询订单时,查调用查询sql

1.修改 mapper 配置文件 和 查询语句

点击查看代码
<!--    延迟查询-->
    <resultMap id="usersAndOrdersMapperLazy" type="com.bjsxt.pojo.Users">
        <id property="userid" column="userid"></id>
        <result property="username" column="username"/>
        <result property="usersex" column="usersex"/>
<!--        fetchType 开启延迟缓存  select 要延迟查询的sql  column 数据-->
        <collection property="orders" ofType="com.bjsxt.pojo.Orders"
                    fetchType="lazy" select="selectOrdersByUserId" column="userid"/>
    </resultMap>

    <select id="selectUsersByIdLazy" resultMap="usersAndOrdersMapperLazy">
        select * from users where userid = #{userid};
    </select>
<!--    延迟查询的语句-->
    <select id="selectOrdersByUserId" resultType="com.bjsxt.pojo.Orders">
        select * from orders where user_id = #{userid};
    </select>

2.修改全局配置文件
注意在mybatis全局配置文件中,是有先后顺序的

点击查看代码
    <!--    开启延迟加载-->
    <settings>
        <setting name="lazyLoadTriggerMethods" value=""/>
    </settings>
posted @ 2021-12-02 14:00  风的指引  阅读(254)  评论(0)    收藏  举报