zoukankan      html  css  js  c++  java
  • Mybatis_一对多延迟加载

    做联合查询是查处首层实体对象,具体实体对象内部的关联对象只有用到的时候才去查询使用。

    首先在mybatis核心配置文件中配置:

    lazyloadingEnable:true使用延迟加载,false禁用延迟加载。默认为true。

    aggressiveLazyLoading:true启用时不使用延迟加载,false使用延迟加载

    在SQLMapConfig.xml中<configuration>标签下添加

        <settings>
            <!-- 延迟加载的总开关 -->
            <setting name="lazyLoadingEnabled" value="true"/>
            <!-- aggressiveLazyLoading设置成false才是启用延迟加载 -->
            <setting name="aggressiveLazyLoading" value="false"/>
        </settings>

    范例:根据PersonId查订单,使用延迟加载效果

    在personMap.xml写:

        <!-- ============延迟加载============ -->
        <!-- 
        column:主sql查出来的某一列作为参数传递给子sql
        select:子sql的位置,只有id不行,前面还要加上命名空间
        -->    
        <resultMap type="xxx.x.Person" id="selectPersonByIdLazyRM" extends="BaseResultMap">
            <collection property="orderList" column="person_id" select="xxx.x.mapper.OrdersMapper.selectOrdersByIdLazy">
            </collection>
        </resultMap>
        <!-- 主sql: -->
        <select id="selectPersonByIdLazy" parameterType="int" resultMap="selectPersonByIdLazyRM">
            select * from person t where t.person_id = #{personId}
        </select>

    在OrdersMap.xml写:

        <select id="selectOrdersByIdLazy" parameterType="int" resultMap="BaseResultMap">
            select * from orders t where t.person_id = #{personId}
        </select>

    在java中写:

        SqlSessionFactory sessionFactory;
        public void selectPersonByIdLazy() {
            // 创建SqlSession
            SqlSession session = sessionFactory.openSession();
            try {
                //发出主sql
                Person person = session.selectOne("xxx.x.mapper.PersonMapper.selectPersonByIdLazy", 1);
                //发出子sql
                System.out.println(person.getOrderList());
            } catch (Exception e) {
                e.printStackTrace();
                session.rollback();
            } finally {
                session.close();
            }
        }
        
  • 相关阅读:
    [DB] 数据库的连接
    JS leetcode 翻转字符串里的单词 题解分析
    JS leetcode 拥有最多糖果的孩子 题解分析,六一快乐。
    JS leetcode 搜索插入位置 题解分析
    JS leetcode 杨辉三角Ⅱ 题解分析
    JS leetcode 寻找数组的中心索引 题解分析
    JS leetcode 移除元素 题解分析
    JS leetcode 最大连续1的个数 题解分析
    JS leetcode 两数之和 II
    JS leetcode 反转字符串 题解分析
  • 原文地址:https://www.cnblogs.com/lonske/p/9021209.html
Copyright © 2011-2022 走看看