mybatis——高级查询和缓存

一个复杂的映射都是从最基层的映射配置开始的,要学会循序渐进,不要一上来就想着最简配置。

一对一映射

       1.使用自动映射处理一对一关系

               通过别名让mybatis自动将值匹配到对应的字段  或者  复杂的属性映射,可多层嵌套

        2.使用resultMap配置一对一映射

        3.使用resultMap的association标签来配置一对一映射

<!--extends:继承的是mbg生成的resultMap-->
<resultMap id="userRoleMap" extends="userMap" type="com.bdqn.simple.pojo.SysUser">
<!--resultMap:指向命名空间为com.bdqn.simple.mapper.RoleMapper的xml里的id为roleMap的resultMap-->
<association property="role" columnPrefix="role_" resultMap="com.bdqn.simple.mapper.RoleMapper.roleMap"/>
</resultMap>

    上述三种都是关联的嵌套结果映射,通过一次sql查询,根据表或映射的属性映射到不同的对象。

           4.association标签的嵌套查询

               通过简单sql多次查询转换为我们需要的结果

                修改sql,然后

<resultMap id="userRoleMapSelect"  extends="userMap"
                 type="com.bdqn.simple.pojo.SysUser">
      <association   property="role"
                            <!--延迟加载,避免n+1问题-->
                             fetchType="lazy"
                            <!--命名空间为com.bdqn.simple.mapper.RoleMapper的selectRoleById方法-->
                             select="com.bdqn.simple.mapper.RoleMapper.selectRoleById"
                             column="{id=role_id}"/>
</resultMap>
<settings>
<!--默认为true,对具有延迟属性的调用都会导致该对象完整加载-->
     <setting  name="aggressiveLazyLoading"  value=""false/>
</settings>

  

一对多映射

         javaBean内部嵌套一个复杂的数据类型(集合)属性

         两种配置方式:collection集合的嵌套结果映射

                                collection集合的嵌套结果查询

         collection支持的属性和作用和association的一样,能存储一对多的数据结构肯定也能存储一对一关系。

缓存配置

         一级缓存:是和SqlSession绑定的,存在sqlSession的生命周期。

          在同一个sqlSession内查询,mybatis会把查询的方法和参数通过算法生成缓存的键值,将其和查询结果放入一个Map对象中.在次查询,方法名和参数相同,mybatis会取出缓存中的对象。

         insert   update   delete  都会清空一级缓存

         二级缓存:.在配置文件通过cacheEnabled默认全局启用状态

          是和映射文件的命名空间绑定的,需要<cache/>开启二级缓存..

          适合查询为主的的应用,绝大数都是以单表查询

           一般都在业务层使用可控制的缓存来替换二级缓存

              

猜你喜欢

转载自www.cnblogs.com/lslshuo/p/9122444.html