Mybatis学习(3)

news2024/12/23 11:36:50

目录

一、JDBC vs Mybatis

二、Mybatis  Plugin

 三、Dao接口和xml文件的sql如何建立关联

四、Mybatis如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

 五、动态SQL

六、一级缓存和二级缓存 

七、接口绑定的实现

 八、Mybatis vs Hibernate

九、Mybatis初始化过程

十、Mybatis延迟加载

1、是什么

2、加载时机


一、JDBC vs Mybatis

(JDBC有哪些不足,Mybatis是如何解决这些问题的?)

1、数据库频繁创建释放,影响系统性能,使用数据库连接池可解决此问题

解决:在mybatis-config.xml中配置连接池,使用连接池管理数据库连接

2、Sql语句写在代码中,实际应用不易维护,sql变动需要改变代码

解决:将Sql语句配置在xxxmapper.xml文件中,与java代码分离

3、向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应

解决:mybatis自动将java对象映射至sql语句

4、对结果集解析麻烦

解决:mybatis将自动将sql执行结果映射至java对象

二、Mybatis  Plugin

例:PageHelper

相当于拦截器,借助JDK动态代理,对mybatis的四大核心对象进行拦截,用来增强核心对象的功能。

①四大核心对象:

ParameterHandler:处理SQL的参数对象

ResultSetHandler:处理SQL的返回结果集

StatementHandler:数据库的处理对象,用于执行SQL语句

Executor:MyBatis的执行器,用于执行增删改查操作

 三、Dao接口和xml文件的sql如何建立关联

1、Mybatis会把每个SQL标签封装成SqlSource对象xml文件中的每一个SQL标签就对应一个MappedStatement对象,其中有两个重要属性

①id:全限定类名+方法名 

②sqlSource:当前SQL标签对应的SqlSource对象

2、Dao接口的工作原理是JDK动态代理。Mybatis运行时会使用JDK动态代理为Dao接口生成代理对象,代理对象会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回

Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement 

四、Mybatis如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

1、使用标签逐一定义对象属性名和列名之间的映射关系

2、使用sql列的别名功能,将列别名书写为对象属性名

3、resultmap是手动提交,人为提交,resulttype是自动提交

   resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟 resultMap不能同时存在

 五、动态SQL

1、根据不同的条件生成不同的SQL语句

2、所谓的动态SQL,本质还是SQL语句,只是我们可以在SQL的层面,去执行一个逻辑代码

3、Mybatis动态sql可以让我们在xml文件中,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能

有哪些动态SQL:if、where、set、choose、when、otherwise、foreach

六、一级缓存和二级缓存 

1、一级缓存:sqlSession级别的缓存。作用在同一个sqlSession中,不同的sqlSession中的缓存是不能互相读取的。Sql在执行一次查询时,先去缓存中找,若有,直接读取;若缓存中没有数据,再从数据库中查询,将查询到的数据存入一级缓存区域。但是,在进行增删改操作后,为了避免脏读,缓存会被清空

2、二级缓存:mapper级别的缓存。作用范围更大。多个sqlSession去操作同一个Mapper的sql语句,共用二级缓存。

七、接口绑定的实现

1、通过在xml文件中的namespace中书写接口的全路径名实现(sql语句较复杂时推荐使用)

2、通过注解实现,在接口的方法上面加上@Select@Update等注解,里面包含sql语句(sql语句较简单时推荐)

 八、Mybatis vs Hibernate

Mybatis不完全是个ORM框架,它需要程序员自己编写sql语句。Mybatis直接编写原生态sql,灵活度高,适合对关系数据模型要求不高的软件开发,因为软件需求变化频繁;Hibernate关系映射能力强,数据无关性好,可节省很多代码。

九、Mybatis初始化过程

加载配置文件、映射配置文件以及Mapper接口中的注解信息,解析后的配置信息会形成相应的对象并保存到Configuration对象中,并创建DefaultSqlSessionFactory供sql执行过程创建出接口sqlSession供给用户进行操作。

十、Mybatis延迟加载

1、是什么

也称为懒加载。对关联对象的查询有延迟设置,对主加载对象都是直接执行查询语句

要求:关联对象的查询与主加载对象的查询必须是分别进行的select语句,不能是使用多表连接所进行的select查询

2、加载时机

  • 直接加载:执行完对主加载对象的 select 语句,马上执行对关联对象的 select 查询。
  • 侵入式延迟: 执行对主加载对象的查询时,不会执行对关联对象的查询。但当要访问主加载对象的详情属性,就会马上执行关联对象的select查询。
  • 深度延迟: 执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象的详情时也不会执行关联对象的select查询。只有当真正访问关联对象的详情,才会执行对关联对象的select查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis的注解开发学习笔记

学习视频:5001 Select注解_哔哩哔哩_bilibili~5009 案例:基于MyBatis注解的学生管理程序_哔哩哔哩_bilibili 目录 1.基于注解的单表增删改查 1.1Select注解 1.2Insert注解 1.3Update注解 1.4Delete注解 1.5Param注解 2.基于注解的关联查询 2.1一对一查询 2.2…

[Meachines] [Easy] nibbles Nibbleblog-Upload

信息收集 IP AddressOpening Ports10.10.10.75TCP:22,80 $ nmap -p- 10.10.10.75 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 c4:f8:ad:e8:f8:04:…

实践致知第17享:电脑忽然黑屏的常见原因及处理方法

一、背景需求 小姑电话说:最近,电脑忽然就黑屏了(如下图所示),但是等待几十秒甚至一分钟,电脑就能自然恢复了,这种状况一天能出现三四次,怎么办? 二、分析诊断 电脑黑屏…

C++从入门到起飞之——string类用法 全方位剖析!

🌈个人主页:秋风起,再归来~🔥系列专栏:C从入门到起飞 🔖克心守己,律己则安 目录 1. 为什么学习string类? 1.1 C语言中的字符串 1.2 两个面试题(先不做讲解) 2. 标准库中…

IMYAI智能助手介绍:全能AI工具箱,AI爱好者AIGC系统的首选。

IMYAI系统官方网站:https://new.imyai.top 引言: IMYAI系统是一款集多种先进AI技术于一身的创作工具箱,为用户提供无限的创作可能。不论您是想创作精彩的文章,还是创作精美的绘画作品,IMYAI系统都能满足您的需求。它集…

不想要反馈的错误遮挡页面,,想让它在控制台提示

开始页面是这样的 然后在vue.config.js 中修改 devServer: {client: {//当出现编译错误或警告时,在浏览器中是否显示全屏覆盖。 示例为只显示错误信息overlay: {runtimeErrors: false,},},},然后关闭服务,重新运行项目。 结果

【Netty】netty启动流程源码解析

文章目录 Netty整体架构一个启动流程源码解析new NioEventLoopGroup(1)构建线程池基础信息构建线程选择策略 groupchannelhandlerchildHandlerbindinitAndRegister反射创建 NioServerSocketChannel 对象init 注册channeldoBind0 流程图思考 Netty整体架构 是什么: N…

【学习方法】高效学习因素 ① ( 开始学习 | 高效学习因素五大因素 | 高效学习公式 - 学习效果 = 时间 x 注意力 x 精力 x 目标 x 策略 )

文章目录 一、高效学习因素1、开始学习2、高效学习因素五大因素3、高效学习公式 - 学习效果 时间 x 注意力 x 精力 x 目标 x 策略 一、高效学习因素 1、开始学习 对于 学习差 , 调皮捣蛋 的学生 , 不要把 学习成绩差 的 原因 归因为 不爱学习 / 没有学习方法 , 可能是 还没有 …

Docker-学习笔记(借助宝塔面板)

ubuntu环境 一、安装 可以参考官网进行或其他博客进行安装 1.进入宝塔面板 进图Docker菜单,查看是否提示安装。 2.查看是否安装 查看版本 docker -v 证明已经安装 二、常用命令 1.查看版本 docker -v 2.启动、停止、重启docker systemctl start docker…

windows C++-通过 C++/WinRT 使用 API(一)

本文介绍如何使用 C/WinRT API,无论它们是 Windows 的一部分、由第三方组件供应商或自行实现。 本文中的代码示例较短,并且很容易试验,可以通过创建新的 Windows 控制台应用程序 (C/WinRT) 项目和复制粘贴代码来重现它们。 但是,…

【Redis】浅谈架构和认识Redis

目录 架构演进 单机架构 应用数据分离架构 应用服务集群架构 读写分离/主从分离架构 冷热分离架构(引入缓存) 垂直分库 微服务架构 认识Redis Redis的特性 架构演进 单机架构 简单来说就是只有一台服务器,这个服务器用来负责所有…

GlobalMapper方量计算(两期地形对比,提取填挖方区域及每个区域的方量)

0.序 在工程设计中,经常需要根据设计方案和现状地形之间进行方量计算,尤其关注方量变化的区域,哪些区域需要填方,哪些区域需要挖方,并依据此进行方量的平衡。 在流域管理中,尤其是湿地、三角洲等容易淤积或…

详细分析Java中的SPI机制(附Demo)

目录 前言1. 基本知识2. Demo3. 解读源码 前言 相关的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 1. 基本知识 SPI(S…

PANDA:免微调提升大型语言模型领域特定能力的新方法

人工智能咨询培训老师叶梓 转载标明出处 大模型虽然在广泛的任务上具有通用性,但在面对特定领域的任务时,它们的性能往往不如专门为这些领域训练的模型。传统的知识蒸馏(Knowledge Distillation, KD)方法通过资源密集型的微调过程…

怎么在电脑上查找打印机打印过的文件?告别翻箱倒柜!电脑查找已打印文件技巧公示!

在日常办公中,我们经常会使用打印机来输出各种文件,但有时候,我们可能需要回顾或查找之前打印过的文件。然而,这些文件一旦打印完成,往往就离开了我们的电脑屏幕,进入了纸质世界,而电子文件可能…

Tree-of-Traversals:结合知识图谱与大模型,通过树遍历和回溯寻找高置信度推理路径

Tree-of-Traversals:结合知识图谱与大模型,通过树遍历和回溯寻找高置信度推理路径 Tree-of-Traversals算法解析对比 MindMap1. 与知识图谱(KGs)的整合2. 推理方法3. 灵活性与可扩展性4. 在医学诊断中的应用 速度和准确1. 速度2. 推…

数据结构第九讲:二叉树

数据结构第九讲:二叉树 1.实现链式结构二叉树1.1二叉树的节点结构1.2创建二叉树节点1.3前中后序遍历1.3.1前序遍历1.3.2中序遍历1.3.3后序遍历1.3.4总结 1.4二叉树结点的个数1.4.1错误示范1.4.2实现方法 1.5二叉树叶子结点的个数1.6二叉树第k层结点的个数1.7二叉树的…

看门狗应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

看门狗应用编程 看门狗应用编程介绍 看门狗定时器的基本概念 看门狗是一个可以在一定时间内被复位/重置的计数器 如果在规定时间内没有复位,看门狗计时器溢出会对CPU产生复位信号使系统重启 有些看门狗可以只产生中断信号而不会使系统复位 I.MX6UL/I.MX6ULL So…

如何减少内存碎片的产生——页

文章目录 1 页的设计目的2 进程块和主存块的对应关系3 页、页框、页表3.1 页(Page)3.2 页框(Page Frame)3.3 页表(Page Table) 4 逻辑地址到物理地址的转换4.1 转换过程4.2 具体示例4.3 图示 参考资料封面 …

C语言程序设计25

《C程序设计教程(第四版)——谭浩强》 习题2.2 分析下面程序的运行结果,然后上机验证。 代码: //《C程序设计教程(第四版)——谭浩强》 //习题2.2 分析下面程序的运行结果,然后上机验证。#inc…