mybatis学习五之延迟加载

来源:互联网 发布:mac右键菜单设置 编辑:程序博客网 时间:2024/05/15 13:50

1.延迟加载

   1.1 association 和collection都有延迟加载的功能,(collection也可以实现,下面介绍association,语法一样)

         延迟加载: 先从单表查询,需要时再从关联表去查询提高数据库性能,只有在调用get方法获取的时候,association的查询才会进行,不然的话就只进行单表的

   1.2 使用association

         1.2.1编写mapper.xml

                 需要定义两个mapper的方法对应的statement,其中一个由association调用

                 1) 只查询订单信息(假设有用户和订单表)

                      在查询订单的statement中使用association 去延迟加载(执行) 下面的statement(关联查询用户的信息)

                 2)关联查询用户信息

                    通过上面查询到的订单信息中的user_id 去查用户信息

                    <resultMap type="要返回的自定义类" id="resultMap的唯一标识">

                              <id columns= "" property=""/>//关于resultMap在上一篇中有记载

                              <association property= "" javaType = "" select="" columns="">        

                              </association>

                    </resultMap>

                    // javaType 表示使用的返回的是什么类型 List的话就用 ArrayList ,

                    //property 表示使用List的泛型的类对象

                    //select 指定延迟加载要使用的statement的id 

                    //columns 表示订单中关联用户的columns

                   <select id="query"  resultMap="上面的resultMap">

                            sql语句 查询订单

                   </select>

                   <select id="queryUser" resultType=""   parameterType="">

                            SQL语句

                   </select>

PS: mybatis默认没有开启延迟加载,需要在sqlMapConfig.xml(全局xml)中进行配置setting全局变量

         LazyLoadingEnabled  全局性设置懒加载,若设为false则所有的相关联的都会被初始化(意思是使用上面的方法,开始就会被加载查询 ,默认值是false)   允许值 true | false ,设置为true 开启延迟加载的开关

         aggressiveLazyLoading 当设置为true的时候,懒加载的对象可能被任何懒属性全部加载,否则每个属性都按需加载(表示有多个懒属性,如果是默认的true,一个懒属性加载,都会被加载,不能达到数据库性能优化的效果),默认值为true,允许的值true | false, 将积极加载改成消极加载

        <settings>

              <setting name=""  value="" />

   </settings>