mybatis的基础架构和原理

85 阅读3分钟

什么是mybatis

mybatis是一个开源的持久层框架这个框架:是能够帮助我们实现B/S架构开发,提供快速编写的一个半成品软件,他是基于ORM思想封装支持自定义SQL的半自动持久层框架,底层是JDBC他主要包括Connection和sqlSession

ORM是对象的映射其中sql表与java的实体对应关系
  1. 表 对应 实体
  2. 字段{列} 对应 属性
  3. 记录{行} 对应 对象
mybatis工作原理
  1. 解析配置,通过构建者模式创建sqlSession(sql赛训)Factory(fi可特瑞)对象
  2. 通过sqlSessionFactory对象获取sqlSession对象,用工厂模式
  3. 通过sqlSession获取Mapper接口代理,用的JDK动态代理
  4. Mapper接口调用方法,访问数据库。是通过Mapper接口与Mapper映射文件进行绑定
  • [namespace 写 接口全类名
  • statementid 写 接口中的方法名
  • parameterTypa 写 接口参数类型 高版本可不写
  • resultTypa 写 接口返回值类型,集合写泛型。如果查询结果集字段跟要封装的实体属性不一致,就采用resultMap自定义映射 ]
  1. 处理结果 ——resultType或resultMap本质都是resultMap ——resultTypa对应的resultMap中的key,实际是查询结果集列名跟javaBean属性名相同

MyBatis的缓存机制

一级缓存

默认是开启的,无法关闭,存的是副本对象,是Sqlsession级别的

失效的情况

不同的Sqlsession

再两次相同的查询中间,执行的增删改的操作或者是在两次查询的过程中手动执行了commit,还有就是手动执行了clear

二级缓存

默认是关闭的,可以通过配置进行开启,应用需要的时候可以在mapper中的映射文件进行真假标签,存的是散装的数据,是namespace级别的,是多个sqlsession共享的

失效的情况

如果两次查询的 SQL 语句不完全一致(包括参数不同),那么它们会被认为是不同的查询,不会使用缓存。

手动进行了clearCache()的方法

结合spring后MyBatis失效

因为 SqlsessionFactory是在spring来创建并管理的并不是原生的SqlsessionFactory所以spring在整合mybatis之后,为什么mybatis的一级缓存失效了,

mybatis的mapper映射的常用标签

insert(用于插入数据) delete(删除) update(更新) select(查询) resultMap(定义如何将数据库中的列映射到对象的属性上,支持复杂映射) collection(处理一对多关系(如用户和订单)) assocation(处理一对一关系(如用户和详细信息)) if(判断条件是否满足来决定是否加入某个部分的SQL) where(自动处理 WHERE 子句中的逻辑,避免手动添加 AND 或 OR) foreach(遍历集合或数组,常用于批量插入、IN 条件等) trim(类似于 prefix 和 suffix 的功能,可以自定义前缀和后缀,并有条件地去除某些字符) set(特殊形式的 <trim> 标签,用于生成 SET 子句) sql(特殊形式的 <trim> 标签,用于生成 SET 子句) include(引入 <sql> 标签定义的 SQL 片段) when...otherwise(类似于 Java 中的 switch-case 语句,配合 <choose> 使用)

mybatis的mapper接口的方法是否支持重载?

不支持。因为方法名就是去定位sql的唯一标识,而statementid压迫唯一