resultType:
作用:
将查询结果按照sql列名pojo属性名一致性映射到pojo中
场合:
常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示再页面时,此时可直接使用resultType将每一条记录映射到pojo中,在前端页面遍历list(list中的是pojo)即可
resultMap:
使用association和collection完成一对一和一对多的高级映射(对查询结果有特殊的映射要求)
- association:
作用:
将关联查询信息映射到一个pojo对象中
场合:
为了方便查询关联信息可以使用association将关联信息映射为用户对象中的pojo属性中,比如:查询订单及关联用户信息
使用resultType无法将查询结果映射到pojo对象的pojo属性中,根据对结果集查询遍历的需要使用resultType还是resultMap
- collection:
作用:
将关联查询信息映射到一个list集合中
场合:
为了方便查询遍历关联信息可以使用collection将关联信息映射到list集合中,比如:查询用户权限范围模块及模块下的菜单,可使用collection将模块映射到模块list中,将菜单列表应映射到模块对象的菜单list属性中,这样做的目的也是方便对查询结果集进行遍历查询
如果使用resultType无法将查询结果映射到list集合中
延迟加载
1、什么是延迟加载
resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能
需求:
如果查询订单并且关联查询用户信息,如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息,把对用户信息的按需去查询就是延迟加载
延迟加载:
先从单表中查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度快
2、使用association实现延迟加载
参数说明:
select:指定延迟加载需要执行的statement的id(是根据user_id查询用户信息的statement)
要使用userMapper.xml中findUserById完成根据用户id,用户信息的查询,如果findUserbyId不在本mapper中需要前边加namespace
column:订单信息中关联用户信息查询的列,是user_id
<association property="user" javaType="User全路径" select="" column="">
</association>