mybatis提高

1.SqlSessionFactory

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);后发生了啥?
Configuration(jdbcDriver url username password setting...以及一个mapperStatementMap,该map负责把每一条sql(由sourceId唯一确定)与mapperstatement对应起来)
MapperStatement(一条mapper.xml中的sql语句对应一个mapperStatement,主要属性有:namespace,sourceId,resultType,sql 都是mapper.xml的配置信息)

当执行完new SqlSessionFactory()后,主要执行了两个操作:
1.读取mybatis-config.xml的配置信息(...),解析后加载进configuration中
2.读取mapper.xml信息(namespace sourceId..),解析后加载成MapperStatement。然后读取configuration的map,执行map.put(sourceId,mapperStatement)
注意:sourceId = namespace + "." + id 这也是id必须唯一的原因

总结,获取sqlSessionFactory()中主要就是加载解析配置文件

2.神秘的sqlSession

怎么得到 SqlSession sqlSession = sqlSessionFactory.openSession();
哪些实现类 DefaultSqlSession (主要干事的) 
哪些方法:增删改查都有,比较重要的是 getMapper()
getMapper()做了啥?
newInstance ->  Proxy.newProxyInstance -> 在增强invoke方法中 -> mapperMethod.execute(sqlSession, args) -> execute的方法实现中 -> result = sqlSession.selectOne 又交回给了sqlSession

sqlSession四大对象
Executor:执行器,由它统一调度其他三个对象来执行对应的SQL;
StatementHandler:使用数据库的Statement执行操作;
ParameterHandler:用于SQL对参数的处理;
ResultHandler:进行最后数据集的封装返回处理;

在MyBatis中存在三种执行器:

SIMPLE:简易执行器,默认的执行器;
REUSE:执行重用预处理语句;
BATCH:执行重用语句和批量更新,针对批量专用的执行器;

3.几张比较好的图

1.mybatis整体流程图

 

2.mybatis层次图 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 可以通过使用缓存来提高查询效MyBatis 内置了一个事务性查询缓存机制,它能够方便地配置和定制。为了进一步增强和简化缓存功能,MyBatis 3 在缓存实现方面进行了多项改进。 在 MyBatis 中,存在一级缓存和二级缓存。一级缓存是默认开启的,它是基于会话的缓存,存储在会话级别,可以减少与数据库的交互次数。而二级缓存是基于命名空间的缓存,可以被多个会话共享,提高了查询的效。可以使用 EhCache 作为 MyBatis 的二级缓存,它是一个纯 Java 的缓存框架,具有快速和精简的特点。 此外,还可以通过懒加载来提高查询效。在 MyBatis 中,可以使用 resultMap 来实现高级映射,其中的 association 和 collection 具有延迟加载功能。通过设置 fetchType=lazy,在查询主表时,不会将关联的子集查询出来,只有在使用子集时才会进行查询。这样可以避免不必要的数据加载,提高查询效。 总的来说,提高 MyBatis 的查询效可以通过使用缓存机制、选择适合的缓存产品,以及使用懒加载等技术手段来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MyBatis---缓存-提高检索效的利器](https://blog.csdn.net/weixin_54107527/article/details/127849578)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Mybatis提高查询效的方式](https://blog.csdn.net/zhaojunwei666/article/details/98207956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值