Mybatis学习笔记---day03缓存

来源:互联网 发布:淘宝店铺亲属过户 编辑:程序博客网 时间:2024/04/29 08:31

一:Mybatis的延时加载

1.一级缓存的介绍:

Mybatis中有一级缓存,一级缓存默认开启的,是sqlSession级别的缓存,例如:当查询用户订单和用户信息时,首先查出来的是三个订单,而三个订单分别属于两个用户,所以在查询出订单的时候,只需要再向数据库发送两条查询用户信息的sql即可,因为其中的两个订单是属于同一个用户的,这就是Mybatis'的一级缓存

2.通过查询用户信息及订单的例子证明一级缓存的存在

a、编写Mapper接口中的方法
//查询所有订单,使用延时加载先不查询用户信息,当需要时再查询public List<Orders> selectOrdersNoUser();
b、编写Mapper.xml配置文件中的延时加载配置
<!-- 根据用户id获取用户信息 --><select id="selectUserById" parameterType="Integer" resultType="User">select *from user where id = #{id}</select><!-- 手动映射, 获取所有订单信息 --><resultMap type="Orders" id="ordersResultMap"><result column="id" property="id"/><result column="user_id" property="userId"/><result column="number" property="number"/><result column="createtime" property="createtime"/><result column="note" property="note"/><!-- 一对一关系 以下是对用户信息进行延时加载的写法:select:调用之前根据Id获取用户信息方法的门牌号column:select中查询用户信息方法的入参--><association property="user" javaType="User" select="selectUserById" column="user_id"><result column="id" property="id"/><result column="username" property="username"/><result column="sex" property="sex"/><result column="birthday" property="birthday"/><result column="address" property="address"/></association></resultMap><!-- 查询所有订单信息的方法,延时加载用户信息 --><select id="selectOrdersNoUser" resultMap="ordersResultMap">select order.* from Orders</select>
c、编写Junit测试类
//获取所有订单信息,采用延时加载用户的方法@Testpublic void selectOrdersNoUser(){SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<Orders> orders = userMapper.selectOrdersNoUser();System.out.println(orders);}
d、通过直接查询数据库证明订单及用户的关系

e、通过Debug分析数据库sql执行的条数

f、在sqlMapConfig.xml中的setting中配置延时加载开关
<configuration><!-- 全局配置参数 --><settings><!-- 延时加载总开关 --><setting name="lazyLoadingEnabled" value="true"/><!-- 设置按需加载 --><setting name="aggressiveLazyLoading" value="false"/></settings>

二:Mybatis的二级缓存

1.Mybatis的二级缓存是sqlSessionFactory级别的缓存,使用步骤

a、在sqlMapConfig中配置setting群居变量
<configuration><!-- 全局配置参数 --><settings><!-- 延时加载总开关 --><setting name="lazyLoadingEnabled" value="true"/><!-- 设置按需加载 --><setting name="aggressiveLazyLoading" value="false"/></settings>
b、在需要使用二级缓存的Mapper.xml文件中配置使用
<mapper namespace="com.mybatis.mapper.UserMapper"><!-- 开启本mapper的二级缓存 --><cache/>

0 0
原创粉丝点击