首页 > 其他分享 >掌握MyBatis:从入门到精通的全方位指南

掌握MyBatis:从入门到精通的全方位指南

时间:2024-12-28 21:26:26浏览次数:7  
标签:指南 语句 缓存 入门 查询 二级缓存 SQL MyBatis 连接池

mysql缓存:根据sql语句进入缓存,如果sql语句多加一个空格就进入不到同一个缓存,另外数据库数据发生了更新,缓存中的数据不会同步。 延迟加载:先查询基本信息,再查询其他信息(相亲网站),而不是一次就查询出来。

mybatis的框架概述

数据库厂商都会有自己的驱动包,上面一层对jdbc进行接口规范( 对jdbc进行封装),再上一层mybatis框架 MyBatis是一个优秀的基于Java的持久层框架,内部对JDBC做了封装, 使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。( 由之前的7个步骤变成了mapper接口和一个sqlmapconfig.xml文件) MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果以Java对象返回。 采用了ORM的思想。 o:javabean对象 r:表的结构 m:映射mapping(xml文件)

mybatis入门程序

  1. mapper namespace="com.qcbyjy.mapper.UserMapper",叫名称空间,表明以后查找UserMapper接口中的findAll的方法。
  2. select id="findAll"中的id属性编写的UserMapper接口中的方法的名称,固定的。
  3. resultType="com.qcbyjy.domain.User"表明的是findAll方法的返回值类型。
mybatis的核心文件:sqlmapconfig.xml文件 environments:配置环境们,设置默认值 environment:设置数据库环境 transactionManager:设置事务 dataSource:配置连接池, <mappers> <mapper resource="mappers/UserMapper.xml"/> </mappers> 测试类 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); 创建sql会话,通过绘画创建sqlsession对象 不创建代理对象,直接使用会话

代理Dao方式的增删改查

  • #{}和${}的区别:
相当于pret的statement和普通的statement,一个防止sql注入一个不防止 #{}是一个占位符,会自动加上%,'%${value}%'不能修改,固定写法。 #将传入的数据都当成是一个字符串,会对传入的数据加一个双引号 排序使用order by动态参数时使用$不使用# 拿到新增那条数据的主键

MyBatis参数详解

放在xml文件数据库上面

sqlmapconfig文件

mybatis的连接池

  • 什么是连接池:存储连接的容器
  • 解决了什么问题:若果没有连接池,每次执行sql语句都会创建连接,浪费时间、影响程序性能。
  • mybatis连接池的分类:datasource标签中的type属性由3个取值
POOLED----使用连接池,UNPOOLED-----不是使用连接池,JNDI------使用JNDI实现连接池

缓存的概念

1.在内存中临时存储数据,速度快,可以减少数据库的访问次数 2.经常需要查询,不经常修改的数据,不是特别重要的数据都适合存储到缓存中 3jdbc缓存存储的是sql语句

mybatis的一级缓存

  1. MyBatis的一级缓存也是SqlSession的缓存。
  2. 查询的时候,先从SqlSession的缓存中查找,如果有,直接返回。如果没有,查询数据库。
  1. Executor类用来连接数据库。
  2. 一级缓存底层使用的是Map集合,key存储的是执行的SQL语句,value存放的是查询的对象,对象是单例的。
总结:当只创建了一个sqlseesion时执行两条相同的SQL语句时,SQL语句只执行了一次,第二次的SQL语句是从缓存中获取的
  1. 实体类要实现序列化接口,因为数据存放在缓存中是打乱字符的,要实现序列化接口才能原封不动的封装回来
  2. 如果没有事务,一级缓存是没有意义的,每次查询之后,都要进行sqlsession的关闭,数据会被清空
  3. 一级缓存关闭后,数据会被写入二级缓存

一级缓存失效的情况

sqlsession不同

设置了两个sqlsession

sqlsession相同,查询语句不同

sqlsession相同,两次相同的查询语句之间执行了update、insert、delete、commit和close的操作

sqlSession相同,手动清除一级缓存

session.clearCache();

二级缓存

二级缓存是SqlSessionFactory级别,是指dao层(持久层); 常用于用户对查询结果实时性要求不高

二级缓存的开启

在核心配置文件中,设置全局属性cacheEnable="true",sqlmapconfig文件 在映射文件中设置,xxxmapper.xml文件 实体类必须实现序列化接口,序列化是为了缓存数据 二级缓存必须在SQL session(一级缓存)关闭或提交之后有效

二级缓存失效情况

两次查询之间执行了增删改操作 每个mapper都有自己的二级缓存区(namespace),如果mapper相同那么他们使用的是同一个二级缓存区。

二级缓存存储的不是对象是数据本身,一级缓存存储的是对象,二级缓存是工厂级别

Catch参数的具体细节

eviction(收回策略)
  • LRU(最近最少使用的):移除最长时间不被使用的对象,这是默认值。
  • FIFO(先进先出):按对象进入缓存的顺序来移除它们。
  • SOFT(软引用):移除基于垃圾回收器状态和软引用规则的对象。
  • WEAK(弱引用):更积极地移除基于垃圾收集器状态和弱引用规则的对象。
flushinterval(刷新间隔) 可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。
  • 默认情况不设置,即没有刷新间隔,缓存仅仅在调用语句时刷新。
size(引用数目)
  • 可以被设置为任意正整数,要记住缓存的对象数目和运行环境的可用内存资源数目。默认值是1024 。
readOnly(只读) 属性可以被设置为 true / false。

Mybatis缓存查询顺序

  • 先查询二级缓存,因为二级缓存中可能会有其他程序查询出来的数据,可以直接拿来使用
  • 如果二级缓存命中,再查询一级缓存
  • 如果一级缓存也没有命中,则查询数据库
  • SqlSession关闭之后,一级缓存的数据会写入二级缓存

标签:指南,语句,缓存,入门,查询,二级缓存,SQL,MyBatis,连接池
From: https://blog.csdn.net/m0_73566497/article/details/144795486

相关文章

  • mybatis一对多collection select
     mybatis一对多collectionselect在MyBatis中,处理一对多关系时,通常会在映射文件中使用<collection>元素,并在其中嵌套一个<select>元素来实现对关联表的查询。这种方式允许你从一个表(称为“一”的一方)中查询数据,并同时获取与其关联的多个表(称为“多”的一方)中的数据......
  • Python Matplotlib 使用教程:基本图表绘制指南
    Matplotlib是Python中一个非常流行的绘图库,它以简单易用和功能丰富而闻名,适合各种场景的数据可视化需求。在数据分析和数据科学领域,Matplotlib是我们展示数据的有力工具。本文将详细讲解如何使用Matplotlib绘制常见图表,包括折线图、散点图、柱状图、饼图和直方图等。1.Ma......
  • 《商业分析方法论与实践指南》---从零开始学习
    前言1.什么是真正的商业分析:答:懂业务、懂数据、懂方法论2.学习完整本书,应该收获什么?答:构成商业分析知识体系+形成商业分析全景图第一章:什么是商业分析1.1商业分析思维1.2如何培养出商业分析的思维注重逻辑:把大问题肢解成若干小问题,形成结构化、框架化、分支化,解决问......
  • 避坑指南:Element UI在Vue2项目开发中的那些坑与解
    文章目录一、引言二、ElementUI初体验之坑(一)安装后不生效解决方案:(二)组件引入报错解决方案:三、表单组件的那些“小脾气”(一)重置表单后无法输入(二)表单自动校验“抽风”解决方案:四、日期组件的“时差”问题(一)DatePicker日期难改解决方案:(二)datetime类型报错解......
  • Java面试知识点总结:从基础到高级的全面指南
    在准备Java面试时,系统地覆盖从基础到高级的知识点是至关重要的。以下是一个详细的Java面试知识点总结,帮助你有针对性地准备面试。也算是我自己总结的知识点,先记录下来,说不定下次准备面试的时候,能再用上。1. Java基础在Java面试中,基础知识是考核的核心部分。掌握这些基础知识......
  • 认识macOS系统M1入门级芯片(含有英文版)
    苹果电脑M1芯片全面解析M1是苹果公司在2020年推出的首款自研芯片,它的出现标志着苹果在电脑芯片领域的重大突破1。以下是对苹果电脑M1的详细介绍:技术规格制程工艺:采用5纳米制程工艺,这使得芯片能够在更小的尺寸内集成更多的晶体管,从而提高性能和能效。相比之下,当时英......
  • JS渗透逆向入门
    在做爬虫登录和渗透测试挖洞JS逆向的时候,除了一些简单的爬取或者传参,不需要设置太过复杂的参数构造,但是大多数情况下一些网站的用户名或者密码都会在前端进行一次加密,然后传输到后端进行登录,这时候我们可以选择对前端页面登录方式进行逆向分析。注意:本篇文章主要是讲解在登录......
  • 7-Gin 中自定义控制器 --[Gin 框架入门精讲与实战案例]
    在Gin框架中,"控制器"通常指的是处理HTTP请求的逻辑。虽然Gin本身没有像一些其他框架(例如Django或RubyonRails)那样明确地定义"控制器"的概念,但你可以通过组织代码来实现类似的功能。Gin使用路由组和中间件来帮助组织你的应用程序逻辑。为了创建自定义控制器,你......
  • 小程序隐私协议开发指南
    小程序隐私协议开发指南一、功能介绍涉及处理用户个人信息的小程序开发者,需通过弹窗等明显方式提示用户阅读隐私政策等收集使用规则。为规范开发者的用户个人信息处理行为,保障用户合法权益,微信要求开发者主动同步微信当前用户已阅读并同意小程序的隐私政策等收集使用规则,方可调......
  • 小程序搜索优化指南
    小程序搜索优化指南爬虫访问小程序内页面时,会携带特定的user-agent"mpcrawler"及场景值:1129判断请求是否来源于官方搜索爬虫的方法:签名算法与小程序消息推送接口的签名算法一致。详情参数在请求的header里设置,分别是:X-WXApp-Crawler-TimestampX-WXApp-Crawler-NonceX-WX......