Mybatis学习Day05

加载

  1. 延迟加载:
    在真正使用数据时才发起查询,也叫按需(懒)加载。通常用于:多对多,一对多。

单独配置文件

       <!--select属性指定的内容:查询用户的唯一标识 (调用之前编写的方法全限定类名+方法名)-->
        <collection property="accounts" ofType="com.mybatisDemo.domain.Account"  select="">
            <id column="id" property="id"></id>
            <result column="uid" property="uid"></result>
            <result column="money" property="money"></result>
        </collection>

主配置文件

    <!--开启全局延迟加载-->
    <settings>
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>
  1. 立即加载:
    不管用不用只要调用方法马上发起查询;默认是立即加载。通常用于:一对一,多对一。

缓存

  1. 缓存是什么:
    存在于内存中的临时数据。
  2. 为什么使用缓存:
    减少和数据库的交互次数,提高执行效率。
  3. 适用于缓存的数据:
    经常查询,不经常改变的,正确与否最终结果影响不大的。
  4. 一级缓存:
    指的是Mybatis中SqlSession对象的缓存,当执行查询之后,结果会同时存到sqlSession对象中,结果是一个Map。再次查询时,就先去sqlSesion中查询是否有,有的话会直接拿来用。当sqlSession消失时,Mybatis的一级缓存也就消失了。当调用添加,修改,删除,commit,close方法时会清空一级缓存。
  5. 二级缓存:
    Mybatis是SqlSessionFactory对象的缓存,由同一个sqlSessionFactory对象创建的sqlSession缓存。
    存放的是数据而不是对象。
    主配置文件开启二级缓存:
<settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>

单独配置文件开启:

<!--开启二级缓存-->
    <cache/>
    <!--配置查询所有-->
        <select id="findAll" resultMap="userAccountMap" useCache="true">
            select *  from user u left outer join account a on u.id = a.uid
        </select>

注解

使用注解开发会更简便,不需要去编写单独的配置文件,只需要编写一个主配置文件。
当domian中属性名称与字段名字不同时,在dao中添加:

// 新建UserMap
    @Results(id = "userMap",value = {
            @Result(id = true,column = "id",property = "userId"),
            @Result(column = "username",property = "userName")
    })
//引用编写好的UserMap
    @ResultMap(value = {"userMap"})

一对一(多对一):
除了要在主表中添加从表的对象还要添加对应的Map

//    添加关联表信息
    @Results(id = "accountId",value = {
            @Result(id = true,column = "id",property = "id"),
            @Result(column = "uid",property = "uid"),
            @Result(column = "money",property = "money"),
//            关联字段uid select =  全限定类名+可以执行的方法 fetchType设置加载类型(立即/延时),
            @Result(property = "user",column = "uid" , one=@One(select = "com.mybatis.dao.AccountDao.findById",fetchType=FetchType.EAGER))
    })

一对多:
主表实体类添加从表list对象将一对多的one改成many

二级缓存:
主配置文件添加:

    <!--开启二级缓存-->
    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>

在dao层的类上发添加注解:

@CacheNamespace(blocking = true)

Mybatis的学习结束了,但是我觉得我与Mybatis的故事才刚刚开始。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值