首页 > 其他分享 >mybatis

mybatis

时间:2023-09-15 22:23:18浏览次数:24  
标签:缓存 编译 二级缓存 SQL mybatis 执行

mybatis 执行流程原理

Mybatis底层封装了JDBC,使用了动态代理模式。创建SqlSession,执行Executor

mybatis  缓存

一级缓存(本地缓存)

sqlSession级别的缓存,一级缓存一直是开启的,它实质上就是sqlSession级别的一个Map

与数据库同一次会话期间查询到的数据会放在本地缓存中,以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库

二级缓存(全局缓存)

二级缓存需要手动开启和配置

namespace级别的缓存,一个namespace对应一个二级缓存

如果会话关闭或提交,一级缓存中的数据会被保存到二级缓存中,新的会话查询信息,就可以参照二级缓存中的内容

参数占位符

#{...}

执行SQL时,会将#{…}替换为?,生成预编译SQL,会自动设置参数值

使用时机:参数传递,都使用#{…}

预编译::1.性能更高:预编译SQL,编译一次之后会将编译后的SQL语句缓存起来,后面再次执行这条语句时,不会再次编译。(只是输入的参数不同)(就是控制台带的那个)

2.更安全  (防止SQL注入):将敏感字进行转义,保障SQL的安全性

${...}

拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题

使用时机:如果对表名、列表进行动态设置时使用

缓存失效的情况

  • 不同SqlSession

  • 执行了增删改操作

  • 执行了commit

  • 执行了clear

标签:缓存,编译,二级缓存,SQL,mybatis,执行
From: https://www.cnblogs.com/wmw1212/p/17706028.html

相关文章

  • MybatisPlus之prim标签
    MybatisPlus之trim标签<trimprefix=""suffix=""suffixOverrides=""prefixOverrides=""></trim>prefix:在trim标签内sql语句加上前缀。suffix:在trim标签内sql语句加上后缀。prefixOverrides:指定去除多余的前缀内容suffixOverrides:指定去除多余的后缀内容,如:s......
  • 基于springboot与mybatis的健身器材批发管理系统的设计与实现
    研究的背景意义随着互联网技术的发展,各种类型的管理系统深入到人们的工作学习中,不再是最初的资料查询、在线沟通等简单形式的应用。各种统计分析、物联网、人工智能、AI等技术越来越多,特别典型的就是网上商城。电子商城也分为多种类型,包括B2B、B2C、C2C等。还有我们常见的批发商城......
  • mybatisplus代码生成器 死活连接不上
    dburl改一下:jdbc:mysql://124.220.134.111:3306/content?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai    &useSSL=false一定要加这个鬼东西沃日......
  • mybatis动态sql
    动态sql ......
  • Mybatis 特殊符号(大于,小于,不等于)
    符号原符号替换符号小于<&lt;小于等于<=&lt;=大于>&gt;大于等于>=&gt;=不等于<>&lt;&gt;与&&amp;单引号’&apos;双引号"&quot;......
  • mybatis查询大批量数据的几种方式
    问题背景公司里有很多需要跑批数据的场景,这些数据几十万到几千万不等,目前我们采用的是分页查询,但是分页查询有个深度分页问题,上百万的数据就会查询的很慢常规解决方案全量查询分页查询流式查询游标查询1.全量查询默认情况下,全量查询的话系统会把所有结果集存储在内存中......
  • MyBatis框架详解:一个高效、灵活且易于使用的ORM框架
    MyBatis(原名ibatis)是一个基于Java语言的ORM(对象关系映射)框架,可以将数据库表中的数据转换成Java对象,也可以将Java对象中的数据插入到数据库表中。它采用了数据映射文件和注解两种方式来实现数据的映射,可以方便地管理SQL语句和实体类之间的关系。灵活性相比于其他ORM框架,MyBatis更加......
  • Mybatis中#{}和${}的区别
    #和$都是一种占位符号,都是实现动态SQL的方式1.#占位符等同于dbc里的问号占位符,他相当于向preparestatement里面的预处理语句设置参数,sql语句预编译时会将特殊字符转义,可以有效防止SQL注入。2.\$是用于动态传参,多用于动态SQL里动态传递表名,动态设置排序字段。......
  • 使用三方mybatis-dsc-generator包进行生成类
    使用mybatis-dsc-generator进行生成更加完整完美集成lombok,swagger的代码生成工具,让你不再为繁琐的注释和简单的接口实现而烦恼:entity集成,格式校验,swagger;dao自动加@mapper,service自动注释和依赖;控制器实现单表的增副改查,并集成swagger实现api文档。https://gitee.com/flyin......
  • 基于 COLA 架构的 Spring Cloud Alibaba(二)整合 MyBatis-Plus、 Knife4j
    上一篇中,我们介绍了项目的基本架构和相关知识。这一篇,我们将在上一篇已搭建好的项目基础架构上进行整合MyBatis-Plus、Knife4j。1.整合MyBatis-Plus1.1.关于MyBatis-PlusMyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效......