mybatis重点

mybatis重点

#{}和${}的区别:
#{}的用法:
(1)使用索引从0开始,#{0}表示第一个内容
(2)也可以使用#{param1}获取第一个参数
(3)如果只有一个参数(基本类型或者是string),mybatis对#{}里面的 内容没有要求,写内容即可
(4)如果参数是对象,写法为#{属性名}
(5)如果参数是map,写法为#{key}

#{}获取参数的内容支持索引获取,param获取指定参数,并且sql使用?占位符,底层使用的是preparedstatement预处理
${}使用的是字符串拼接,默认找大括号里面内容的set/get方法,如果写数字,就是一个数字

mybatis中的缓存:
在mybatis中,默认是sqlsession缓存开启,同一个sqlsession对象调用同一个select标签时,只有第一次访问数据库,第一次之后把查询结果缓存到sqlsession缓存区中也就是内存中,底层缓存的是statement对象,在mybatis中一个select标签对应一个statement对象,它的有效范围是同一个sqlsession对象
缓存的流程:
(1)先去缓存区中查找是否存在statement对象
(2)返回结果
(3)如果没有缓存statement对象,去数据库获取数据
(4)数据库返回查询结果
(5)把查询结果放到对应的缓存区中
sqlsessionfactory缓存也叫二级缓存,它的有效范围是同一个factory内任意sqlsession都可以获取,使用的时机是当数据频繁呗使用,很少被修改时使用二级缓存,它必须在mapper.xml中添加cache标签并需要写上readonly为true,如果不写,则需要把实体类实现seriazable接口,当sqlsession对象close()或者commit()时会将sqlsession缓存的数据刷到sqlsessionfactory缓存区中

mybatis的运行原理(最好看底层代码的实现)
mybatis运行时需要先通过resource.getResourceAsStream加载全局配置文件,然后需要实例化sqlsessionfactorybuilder构建器,通过构建器帮助创建sqlsessionfactory的实现类defaultsqlsessionfactory,在实例化defaultsqlsessionfactory之前需要先创建xmlconfigbuilder来解析全局配置文件流,并把解析结果存放到configuration中,之后把configuratio作为参数传递给defaultsqlsessionfactory,到此sqlsessionfactory工厂创建成功,由sqlsessionfactory创建sqlsession,每次创建sqlsession时都会创建一个transaction事务对象,还会创建一个执行器excutor,最后实例化defaultsqlsession传递给接口,根据需求进行事务操作,执行失败则回滚事务,执行成功提交给数据库并且关闭sqlsession

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值