Mybatis基础知识2

承接上文:Mybatis基础知识-CSDN博客

8 如何使用Mybatis实现批量插入 ?

批量插入数据:
1 mybatis 的接口方法参数需要定义为集合类型 List
public abstract void saveUsers(List<User> users);

2 、在映射文件中通过 forEach 标签遍历集合,获取每一个元素作为 insert 语句的参数值
<!-- 批量插入用户 -->
<insert id="savaUsers" parameterType="java.util.List">
insert into tb_user(user_name,password)
values
<foreach collection="list",item="user",index="index",separator=",">
(#{user.userName},#{user.password})
</foreach>
</insert>

9 Mybatis的一级、二级缓存 ?

1 、一级缓存 : 基于 PerpetualCache HashMap 本地缓存,其存储作用域为
Session ,当 Session 进行 flush close 之后,该 Session 中的所有 Cache 就将清空,
默认打开一级缓存。如下所示:
使用同一个 sqlSession 对象获取两次 UserMapper 对象,进行了两次用户数据的查
询。控制台的输出结果如下所示:
只执行了一次 sql 语句。说明第二次查询的时候使用的是缓存数据。
2 、二级缓存:二级缓存是基于 namespace mapper 的作用域起作用的,不是依
赖于 SQL session ,默认也是采用 PerpetualCache HashMap 存储。
如下代码:
当执行完 sqlSession1.close() 方法时一级缓存就一斤被清空掉了。再次获取了一个 新的sqlSession 对象,那么此时就需要再次查询数据,因此控制台的输 出如下所示:
可以看到进行了两次查询。
默认情况下二级缓存并没有开启,要想使用二级缓存,那么就需要开启二级缓
存,如下所示:
全局配置文件
<settings>
<setting name="cacheEnabled" value="true"/> <!-- 开启二级缓存 -->
</settings>
映射文件
使用 <cache/> 标签让当前 mapper 生效二级缓存
<mapper namespace="com.itheima.mapper.UserMapper">
<cache/> <!-- 二级缓存生效 -->
<select id="selectAll" resultType="user">
select *
from tb_user;
</select>
<select id="selectById" resultType="user">
select *
from tb_user where id = #{id};
</select>
</mapper>
运行程序进行测试,控制台输出结果如下所示:
只进行了一次查询,那么就说明数据已经进入到了二级缓存中。
3 、对于缓存数据更新机制,当某一个作用域 ( 一级缓存 Session/ 二级缓存
Namespaces) 的进行了新增、修改、删除操作后,默认该作用域下所有 select
的缓存将被 clear
注意事项:
1 、二级缓存需要缓存的数据实现 Serializable 接口
2 、只有会话提交或者关闭以后,一级缓存中的数据才会转移到二级缓存中
3 、可自定义存储源,如 Ehcache
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值