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>