mybatis 缓存 注解开发

缓存

分为一级缓存和二级缓存 提升性能减轻数据库压力

一级缓存存在与一个sqlSession会话中 默认开启,在一个会话内再次查询同一个目标不会去查询数据库而是查询一级缓存内容,除非查询一次后没有保持数据一致性增删改语句过或者查询目标更改才不会走缓存

二级缓存存在于mapper中需要在mapper中开启,mybatis配置文件里头文档说默认开启不过也需要去配置文件开启它。当一级缓存sqlSession关闭后他会存放在二级缓存对应的mapper中。新的sqlSession会话查询相同目标会从二级缓存获取数据,二级缓存没有找一级缓存再到数据库查询。

可以在mapper的查询语句中useCache关闭缓存

二级缓存开启语句位置在每个mapper.xml的namespace下<cache/>开启具有参数 去mybatis官网查看 另外没有readOnly设置为true这个参数 实体类也没有序列化可能会出现异常报错。

 

注解开发

需要配置好mybatis的文件 

再简单sql环境中使用

粘贴接口代码

1
2
3
4
@Select("select * from user where id=#{id}")
   List<User> getUserList( int id);
   @Select("select * from user where id=#{id} and name=#{name}")
   List<User> getUserList2(@Param("id") int id,@Param("name")String name);//多个参数要加 @Param() 取参以注解优先 注解字符串对应sql里头的参数

 测试代码

1
2
3
4
5
6
SqlSession sqlSession = MybatisUtils.getSqlSession();
        //执行sql 方式一 根据mapper里的接口类型和resulttype直接返回
        UserDao mapper = sqlSession.getMapper(UserDao.class);//通过mapper获取他的类 就直接用他的接口
        List<User> userList = mapper.getUserList(1);
        System.out.println(userList);
        sqlSession.close();

  更删改也差不多这样写

 

posted @   中性史莱姆  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示