mybatis 01

1、为什么通过命名空间+id 这两个坐标就可以唯一的定位一条sql 语句  在mybatis中是怎么实现的?看源码

几个核心的类:

SqlSessionFactoryBuilder 通过建造者模式 实例化SqlSessionFactory   建造的过程是一个很复杂的过程  对外是透明的

 

SqlSessionFactory   sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

SqlSessionFactory

SqlSession sqlsession是线程不安全的 所以要保证线程独享  

Mapper

这四个关键类完成一次数据库的访问

 

resultType还是resultMap?

数据库查询出来的字段和pojo映射

resultMap元素是mybatis中最重要最强大的一个元素

<resultMap id ="" type="" autoMapping=""></resultMap>  有三个属性 id type autoMapping

 

怎么传递多个参数:1、使用map传递参数 2、使用注解传递参数 3、使用javaBean的方式传递参数

 

怎么样获取主键?

预编译 给传入参数加单引号 prepareStatement

动态sql元素:

<if></if>

<choose>   <when>  <otherwise>

<trim> <where> <set>

<foreach>

其中if和foreach是最主要的 其他的标签都是辅助作用

 

 

<where></where>  -------> 如果<where>标签内的<if>条件成立的话  去除里面的and 或者 or  如果不成立的话 不会加where 

<set></set> 标签作用:把set块中的逗号去掉  再update的时候常用

<insert>是最难的  需要两个代码块去填充  

<where><set>标签是<trim>标签的一种简写  <trim prefix= "where" prefixOverrides="and | or">

 

 

高频面试题:

通过mybatis怎么样进行批量的操作?

1、通过foreach动态拼装sql语句

2、使用BATCH类型的excutor

 

 

mybatis 代码生成器:

 

为什么超过三个表禁止join?

大部分数据库的性能都太弱了,尤其是涉及到大数据量的多表 join 的查询,需要的对比
与运算的量是会急速增长的,而数据库优化器在多表场景可能不是执行最优的计划,所以这
条规范限制了 join 表的个数,还提及了 j oin 字段类型必须一致并有索引;那有这种约束复杂
SQL 怎么实现?考虑如下三种方式减少 join 表的关联:

1、字段允许适当冗余,以提高查询性能

2、分两次 select,第一次 select 取得主表数据,第二次查从表数据

3、将热点数据存缓存,提高数据的读取效率

 

关联元素:

association 用于表示一对一关系

collection 用于一对多关系

association 标签 嵌套结果方式 常用属性:
property :对应实体类中的属性名,必填项
javaType :属性对应的 Java 类型
resultMap :可以直接使用现有的 resultMap ,而不需要在这里配置映射关系
columnPrefix :查询列的前缀,配置前缀后,在子标签配置 result column 时可以
省略前缀
 
association 标签 嵌套查询方式 常用属性
select :另 一个映射查询的 id, MyBatis 会额外执行这个查询获取嵌套对象的结果
column :列名(或别名),将主查询中列的结果作为嵌套查询的参数
fetchType :数据加载方式,可选值为 lazy eager ,分别为延迟加载和积极加载 ,
这个配置会覆盖全局的 lazyLoadingEnabled 配置
 

 

mybatis中的缓存:

一级缓存:一级缓存默认是开启的 想要关闭一级缓存可以在select标签上配置 flushCache="true" ;一级缓存存在于sqlsession的生命周期中 在同一个sqlsession中查询时mybatis会把执行的方法和参数 通过算法生成缓存的键值 将键值和查询结果存入一个map对象中  如果同一个sqlsession中执行的方法和参数完全一致 那么通过算法会生成相同的键值  当map中已经存在该键值 就会返回缓存中的对象 ;任何的insert update delete操作都会清空一级缓存

二级缓存:二级缓存也叫应用缓存  二级缓存存在于sqlsessionfactory的生命周期中;可以理解为跨sqlsession  缓存是以namespace为单位  不同namespace下的操作 互不影响。

                    二级缓存会造成脏读 不建议开启 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值