【MyBatis】总结

1.xml映射文件都会写一个Dao接口与之对应,Dao工作原理是什么,Dao接口里的方法参数不同时,方法能重载么

Dao接口即Mapper接口,接口的全限名,映射文件中的namespace的值,
接口的方法名就是映射文件中Mapper的Statement的id值
接口方法内的参数就是传递给sql的参数

调用接口时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MapperStatement,每个标签(select,insert…)都会被解析为一个MapperStatement对象。

Mapper接口里的方法是不能重载的,因为使用全限名+方法名的保存和寻找策略。

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

2. Mybatis如何分页,分页插件原理是什么

使用RowBounds对象进行分页,针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成屋里分页功能,也有使用分页插件来完成物理分页。

分页插件原理:使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

3.mybatis的xml映射文件中,不同的xml映射文件,id是否可以重复?

不同的xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复。

原因:namespace+ id是作为Map<String, MapperStatement>的key使用的,如果没有namespace,就剩下id,那么id重复会导致数据互相覆盖,有了namespace,自然id就可以重复,namespace不同,namespace+id自然就不同

4.mybatis是否支持延迟加载,原理?

mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指一对一,collection指一对多查询,在配置文件中,lazyLoadingEnabled=true|false,是否启用延迟加载

原理:使用cglib创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.getB().getName,拦截器invoke方法发现a.getB是null值,name会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完成a.getB.getName方法的调用。

5.mybatis一级,二级缓存

一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session flush或close后,该Session中的所有Cache就将清空,默认打开一级缓存。

二级缓存与一级缓存机制相同,默认PerpetualCache,HashMap存储,不同为:存储作用域为Mapper(Namespace),并且可自定义存储源,如Ehcache,默认不打开二级缓存,要开启二级缓存,使用二级缓存属性累的需要实现Serializable序列化接口(保存对象的状态),可在它的映射文件中配置

对于缓存数据更新机制,当某个作用域(一级缓存Session/二级缓存Namespaces)的进行CUD操作后,默认该作用域下所有select的缓存将被clear。

mybatis中的一级缓存和二级缓存

6.mybatis插件的运行原理,如何编写?

mybatis仅可以编写针对ParameterHandler,ResultSetHandler,StatementHandler,executor4种接口的插件,mybatis使用jdk动态代理,为需要拦截的接口生成代理对象实现接口方法拦截功能,每当执行这4种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler的invoke方法,只会拦截指定需要拦截的方法

编写插件:实现Mybatis的interceptor接口并复写intercept方法,然后在给插件编写注解,指定要拦截哪个接口的哪些方法即可,需在配置文件配置编写的插件。

7.mybatis有哪些?
① SimpleExecutor:每执行一次update或select,就开启一个statement对象,用完立刻关闭statement对象
②ReuseExecutor:执行update或select,以sql作为key查找statement对象,存在就使用,不存在就创建,用完后,不关闭statement对象,而是放置于map
③BatchExecutor:完成批处理

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

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

相关文章

MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点6:MySQL Enterprise Monitor之Query Analyzer

文章目录 MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点6&#xff1a;MySQL Enterprise Monitor之Query AnalyzerMySQL Enterprise Monitor之Query AnalyzerQuery Response Time index (QRTi)例题例题1: Query Analyzer答案与解析1 参考 【免责声明】文章仅供学习交流&#x…

vue中如何通过webpack-bundle-analyzer打包分析工具进行配置优化

vue中随着项目的不断功能迭代和开发&#xff0c;项目文件越来越多&#xff0c;项目的打包文件也越来越大。如何对打包文件进行分析优化&#xff0c;减小打包文件大小呢&#xff1f;可以通过webpack-bundle-analyzer 这个打包分析工具进行解决。 1、webpack-bundle-analyzer的安…

学生管理系统-07打包与上线

一、项目架构 vue的项目必须要进行打包,并部署在nginx服务器上的 二、vue的打包 1、修改vue.cofing.js文件 在该文件中添加publicPath属性,值为./ const { defineConfig } = require(@vue/cli-service) module.exports = defineConfig({ transpileDependencies: true, p…

Python Flask构建微信小程序订餐系统 (十一)

🔥 已经删除的会员不允许进行编辑昵称 🔥 🔥 已经删除的会员要隐藏掉会员信息的编辑按钮 🔥 🔥 创建商品表 food 🔥 CREATE TABLE `food` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`cat_id` int(11) NOT NULL DEFAULT 0 COMMENT 分类id,`name` varchar…

存储转发服务

此服务用于以下场景&#xff0c;有模拟服务的需求&#xff0c;可以通过转发服务&#xff0c;记录请求和返回参数&#xff0c;存入本地&#xff0c;下次同样请求&#xff0c;不再请求真是服务。可以用在soap服务&#xff0c;webapi服务。 Router: import { RouterAbs } from ./…

【算法题解】51. 二叉树的最近公共祖先

这是一道 中等难度 的题 https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/ 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为…

【模型压缩】 LPPN论文阅读笔记

LPPN论文阅读笔记 LPPN: A Lightweight Network for Fast Phase Picking 背景 深度学习模型的问题在于计算复杂度较高&#xff0c;在实际数据处理中需要面临较高的处理代价&#xff0c;且需要专用的加速处理设备&#xff0c;如GPU。随着数据累积&#xff0c;迫切需要设计一种…

【力扣刷题 | 第二十二天】

目录 前言&#xff1a; 63. 不同路径 II - 力扣&#xff08;LeetCode&#xff09; 343. 整数拆分 - 力扣&#xff08;LeetCode&#xff09; 总结&#xff1a; 前言&#xff1a; 今天我们爆刷动态规划章节的题目&#xff0c;相关的算法理论介绍我也有写过文章&#xff1a;【夜…

深度学习anaconda+pycharm+虚拟环境迁移

一、下载好anaconda和pycharm安装包。 下载anaconda:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror pycharm汉化包 二、安装anaconda 深度学习环境配置-Anaconda以及pytorch1.2.0的环境配置&#xff08;Bubbliiiing 深度学习 教程&…

RocketMQ集成Springboot --Chapter1

RocketMQ集成Springboot 三种消息发送方式 生产者 引入依赖 <!--⽗⼯程--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version><…

Java版本企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境&#xff0c;促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标…

uniapp小程序跳转其他小程序uni.navigateToMiniProgram效果demo(整理)

放点击事件里面即可 uni.navigateToMiniProgram({appId: , //跳转的小程序的aooIdpath: pages/index/index?id123, //如果这里不填&#xff0c;默认是跳转到对方小程序的主页面extraData: { //需要传给对方小程序的数据data1: test},success(res) {// 打开成功} })

【html中的BFC是什么】

BFC&#xff08;块级格式化上下文&#xff09;是 CSS 中的一种盒模型布局&#xff0c;是指一个独立的块级容器&#xff0c;容器内部的元素会按照一定规则进行布局。 BFC 具体的规则有以下几个&#xff1a; BFC 内部的元素在垂直方向上相互排列&#xff0c;不会出现浮动的情况。…

JAVA设计模式——单例模式

单例模式是应用最广的设计模式之一&#xff0c;也是程序员最熟悉的一个设计模式&#xff0c;使用单例模式的类必须保证只能有创建一个对象。 今天主要是回顾一下单例模式&#xff0c;主要是想搞懂以下几个问题 为什么要使用单例&#xff1f; 如何实现一个单例&#xff1f; 单…

c++11/c++98动态规划入门第5课,经典DP问题 --- 区间

第1题 取数问题 查看测评数据信息 有一排N个数&#xff0c;你和小明2个人玩游戏&#xff0c;每个人轮流从2端取数&#xff0c;每次可以从左或右取&#xff0c;不能从中间取。你取的所有的数的和是你的得分&#xff0c;小明取的所有的数的和是小明的得分。如果你先取&#x…

ISP 模块原理

图像锐化&#xff1a; 图像信号处理芯片设计原理----13 图像锐化 - 知乎 (zhihu.com) bayer /RGB去噪&#xff1a; 图像信号处理芯片设计原理——12 RAW域和YUV域上的去噪 - 知乎 (zhihu.com) 图像去噪技术简要总结 - 知乎 (zhihu.com) (72条消息) 非局部均值去噪&#xf…

【图像分割】基于蜣螂优化算法DBO的Otsu(大津法)多阈值电表数字图像分割 电表数字识别【Matlab代码#51】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】1. 原始蜣螂优化算法1.1 滚球行为1.2 跳舞行为1.3 繁殖行为1.4 偷窃行为 2. 多阈值Otsu原理3. 部分代码展示4. 仿真结果展示5. 资源获取说明 【可更换其他算法&#xff0c;获取资源请见文章第…

springboot 项目启动不打印spring 启动日志

今天项目遇到一个很奇怪的问题&#xff0c;服务在启动时&#xff0c;不打印spring 的启动日志。经过排查发现是因为其他的依赖引入了 log4j 的依赖&#xff0c;因为我们的项目用的是logback&#xff0c;所以项目中没有log4j 的相关配置&#xff0c;所以干扰到了日志的打印 原因…

Vue入门项目——WebApi

Vue入门——WebApi vue3项目搭建组合式API响应式APIreactive()ref() 生命周期钩子computed计算属性函数watch监听函数父子通信模板引用组合选项 vue3项目搭建 简单看下Vue3的优势吧 下载安装npm及node.js16.0以上版本&#xff08;确保安装成功可用如下代码检查版本&#xff0…

工厂电能质量治理解决方案

1、概述 谐波的危害十分严重&#xff0c;尤其在工厂这种设备较多的场合。大部分设备都是谐波源&#xff0c;谐波使电能的生产、传输和利用的效率降低&#xff0c;使电气设备过热、产生振动和噪声&#xff0c;并使绝缘老化&#xff0c;使用寿命缩短&#xff0c;甚至发生故障或烧…