Mybatis
文章平均质量分 86
MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis
Young丶
这个作者很懒,什么都没留下…
展开
-
MyBatis 架构与原理到执行流程
]我们把Mybatis的功能架构分为三层:(1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。(2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。]这张图从上往下原创 2022-07-06 23:55:17 · 16860 阅读 · 0 评论 -
Mybatis 调优从50s优化到0.3s
稍微总结下我粗略的对比(虽然粗略,但实验结果符合原理层面的理解),如果你想更准确地实验,可以使用 JMH,并且测试更多组数(如 5000,10000 等)的情况。批量保存方式数据量(条)耗时(ms)单条循环插入1000121011100059927mybatis-plus saveBatch(添加 rewtire 参数)10002589手动拼接 sql10002275100055663jdbc executeBatch(添加 rewtire 参数)1000324。原创 2024-04-22 09:02:35 · 1281 阅读 · 0 评论 -
一条 SQL 是如何在 MyBatis 中执行的
MyBatis 执行 SQL 的核心接口为 SqlSession 接口,该接口提供了一些 CURD 及控制事务的方法,另外还可以通过 SqlSession 先获取 Mapper 接口的实例,然后通过 Mapper 接口执行 SQL,Mapper 接口方法的执行最终还是委托到 SqlSession 中的方法。因此可以由 SqlSession 入手分析 SQL 执行流程。原创 2023-10-31 13:57:01 · 1831 阅读 · 3 评论 -
mybatis-plus Invalid bound statement (not found): com.*.*.mapper.xxxMapper.selectById
3、XxxMapper.java的方法返回值是List,但是没有正确配置ResultMap,或者只配置ResultType。方法,发现其他实体的方法仍然使用,这是看实体类发现没有加主键注解,由于疏忽数据库建表是忘记加主键,然后使用。2、XxxMapper.java的方法在XxxMapper.xml中没有,运行则会报此错误。4、XxxMapper.java文件和XxxMapper.xml没有在一个文件夹下面。5、mapper接口中的方法名和mapper.xml中的id标签不一致。,此时改成主键注解改成。原创 2023-08-28 17:05:36 · 4721 阅读 · 0 评论 -
MyBatis Plus 解决大数据量查询慢问题
在实际工作中当指定查询数据过大时,我们一般使用分页查询的方式一页一页的将数据放到内存处理。但有些情况不需要分页的方式查询数据或分很大一页查询数据时,如果一下子将数据全部加载出来到内存中,很可能会发生 OOM(内存溢出);而且查询会很慢,因为框架耗费大量的时间和内存去把数据库查询的结果封装成我们想要的对象(实体类)。在业务系统需要从 MySQL 数据库里读取 100w 数据行进行处理,应该怎么做?原创 2023-08-24 14:15:00 · 14603 阅读 · 0 评论 -
MyBatis 常见面试题
1. 什么是Mybatis?1、Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高2、MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集3、通过xml 文件或注解的方式将要执行的各种 statement 配原创 2022-04-19 13:17:12 · 1993 阅读 · 0 评论 -
JDBC简单的示例
JDBC简单的示例原创 2023-02-22 10:27:15 · 48557 阅读 · 0 评论 -
聊一聊数据加密中如何进行模糊查询
我们到这里对加密数据的检索方案全部介绍完了,我们首先提到的是网上搜索随处可见的沙雕做法,在这里也讲了不推荐使用这些沙雕做法,尽量使用常规做法,如果公司有专业算法方向人才的话不妨可以考虑基于算法层面的超神做法。总的来说从投入、产出比、及实现、使用成本来算的话常规做法二是非常推荐的。最后送上那句老话,Keep Real,Love and peace!...原创 2022-08-16 08:15:00 · 30628 阅读 · 0 评论 -
聊聊数据安全,mybatis 如何有效预防脱库
到这里整篇也就差不多都介绍完了,我们现在回顾一下,首先我们介绍了数据安全的问题,并且说明了安全问题一般发生在两个方面,一个是软件程序,一个是人员管理。我们在软件程序方面介绍了两种预防数据安全的手段,一个是数据库连接密码加解密,一个是数据加解密,数据库连接加密可以有效预防服务器被攻击后通过翻找程序来进一步攻击数据库,数据加解密可以有效预防数据库被攻击或脱库后泄漏用户及公司隐私数据。...原创 2022-08-16 06:00:00 · 30511 阅读 · 0 评论 -
超经典的 25 道 MyBatis 面试题
第 1 种:通过在查询的 sql 语句中定义字段名的别名,让字段名的别名和实体类 的属性名一致第 2 种:通过来映射字段名和实体类属性名的一一对应的关系。模糊查询 like 语句该怎么写?第 1 种:在 Java 代码中添加 sql 通配符。第 2 种:在 sql 语句中拼接通配符,会引起 sql 注入Mapper 接口的工作原理是什么?Mapper 接口里的方法,参数不同时,方法能重载吗?Dao 接口即 Mapper 接口。接口的全限名,就是映射文件中的 namespace 的值;接口的方法名原创 2022-07-08 06:45:00 · 18724 阅读 · 0 评论 -
聊聊 MyBatis 中的设计模式
虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。Mybatis至少遇到了以下的设计模式的使用:Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;工厂模式,例如SqlSessionFactory、ObjectFactory、原创 2022-07-07 15:06:40 · 17860 阅读 · 0 评论 -
Mybatis:颠覆你心中对事务的理解
1.说到数据库事务,人们脑海里自然不自然的就会浮现出事务的四大特性、四大隔离级别、七大传播特性。 四大还好说,问题是七大传播特性是哪儿来的?是Spring在当前线程内,处理多个数据库操作方法事务时所做的一种事务应用策略。事务本身并不存在什么传播特性,不要混淆事务本身和Spring的事务应用策略。(当然,找工作面试时,还是可以巧妙的描述传播特性的)2.一说到事务,人们可能又会想起create、begin、commit、rollback、close、suspend。 可实际上,只有commit、rollback原创 2022-07-07 14:40:09 · 17603 阅读 · 1 评论 -
mybatis的mapper为啥只有接口没有实现类,它却能工作?
这时候,我们发现Configuration里面出现了一个mapperRegistry,翻译过来可以理解为mapper的注册器,其实在加载UserMapper.xml的时候,我们就需要在mapperRegistry里面进行注册,所有,我们可以从这里面进行获取。那么只能是动态代理,动态代理接口的所有方法,每次接口被调用,就会进入动态代理对象的invoke方法,然后加载xml中的sql完成操作数据库,再返回结果。所以,动态代理代理还是对象类,那么我们只有接口,不能new,哪来的对象呢?,就是反射生成的这个对象。原创 2022-07-07 13:40:59 · 19310 阅读 · 1 评论 -
聊聊Mybatis里面的缓存机制吧
一级缓存是默认开启的一级缓存是基于SqlSession生命周期的二级缓存是namespace级别的开启二级缓存后,会使用 CachingExecutor 装饰 Executor ,进入一级缓存的查询流程前,先在 CachingExecutor 进行二级缓存的查询。mybatis 缓存流程。原创 2022-06-13 17:40:38 · 4425 阅读 · 0 评论 -
听说你精通 MyBatis 我们切磋下
MyBatis logo先吹一下:再说一下缺点ORM简单示意图JDBC编程的不足1、数据连接创建、释放频繁造成系统资源浪费从而影响系统性能2、sql语句写在代码中造成代码不易维护3、向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。4、对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。PS:直接用Hibernate的应该不多了吧,毕竟大家都是“敏捷开发”,但架不住面试爱问。相同点这还用说?不转载 2022-06-13 17:32:23 · 4056 阅读 · 0 评论 -
mybatis 最常用的 SqlSessionFactory 和 SqlSession,你真的了解吗?
前言学习框架一个比较好的路径阅读源码。本文介绍的SqlSessionFactory和SqlSession。可以通过了解SqlSessionFactory接口和SqlSession接口以及两个的实现类入手,去看源码了解实现过程。最好能把项目下载到本地,慢慢分析实现过程。MyBatis的持久化解决方案是将用户从原始的JDBC访问中解放出来,用户只需要定义需要操作的SQL语句,无须关注底层的JDBC操作,就可以以面向对象的方式来进行持久化层操作。底层数据库连接的获取,数据访问的实现,事务控制等都无须用户关心原创 2022-05-31 09:55:19 · 4772 阅读 · 0 评论 -
MyBatis 插件原理与实战
插件就是在具体的执行流程插一脚(触发点、拦截器)来实现具体的功能。一般插件会对执行流程中的上下文有依赖,抽象的说,我们也可以把MyBatis看作是JDBC的插件,只是功能越来来多,越来越强大,最后我们给了他一个新名字,叫做框架。不管怎样,JDBC的那一套还是不会变的,只是做了抽象、封装、归类等。要想知道插件的原理,首先就要对它的执行流程有一定的把控。今天这篇文章到这里结束了,讲解了什么是插件首先需要了解执行流程,然后回顾我们的JDBC流程来推导出MyBatis的执行流程,通过初始化的。转载 2022-05-24 18:12:23 · 2808 阅读 · 0 评论 -
Mybatis批处理踩坑 从 7 分钟到 10 秒,Mybatis 批处理真的很强
这篇文章会一步一步带你从一个新手的角度慢慢揭开批处理的神秘面纱,对于初次写Mybatis批处理的同学可能会有很大的帮助,建议收藏点赞~处理批处理的方式有很多种,这里不分析各种方式的优劣,只是概述 ExecutorType.BATCH 这种的用法,另学艺不精,如果有错的地方,还请大佬们指出更正。问题原因在公司写项目的时候,有一个自动对账的需求,需要从文件中读取几万条数据插入到数据库中,后续可能跟着业务的增长,会上升到几十万,所以对于插入需要进行批处理操作,下面我们就来看看我是怎么一步一步踩坑的。简单了转载 2022-05-19 14:50:40 · 2437 阅读 · 0 评论 -
从 7 分钟到 10 秒,Mybatis 批处理真的很强
处理批处理的方式有很多种,这里不分析各种方式的优劣,只是概述 ExecutorType.BATCH 这种的用法,另学艺不精,如果有错的地方,还请大佬们指出更正。问题原因在公司写项目的时候,有一个自动对账的需求,需要从文件中读取几万条数据插入到数据库中,后续可能跟着业务的增长,会上升到几十万,所以对于插入需要进行批处理操作,下面我们就来看看我是怎么一步一步踩坑的。简单了解一下批处理背后的秘密,BatchExecutor批处理是 JDBC 编程中的另一种优化手段。JDBC 在执行 SQL 语句时,会将转载 2022-05-09 17:37:06 · 2470 阅读 · 0 评论 -
你应该要知道的mybatis基础
之前有读者提到让我写一写 mybatis 的面试题,不过我最近自己面试包括之前看的一些面经发现真的很少问 mybatis 。不过都已经整理完了,那么就来吧。这篇也借着面试题,稍微深入的看下 mybatis 的实现原理,从源码级别理解 mybatis 的连接池的实现和缓存的实现。话不多说,发车!为什么不直接用 JDBC,而要 ORM 框架直接使用 JDBC 操作比较繁琐:先创建 connection 连接数据库创建 statement 对象通过 statement 对象执行 sql 语句,得原创 2022-05-09 15:14:08 · 2468 阅读 · 0 评论 -
Mybatis源码解读-设计模式总结
虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。Mybatis至少遇到了以下的设计模式的使用:Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;工厂模式,例如SqlSessionFactory、ObjectFact原创 2020-12-07 17:37:25 · 1333 阅读 · 0 评论 -
MyBatis千万级数据查询解决方案,避免OOM
MyBatis千万级数据查询解决方案,避免OOM流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。因此流式查询是一个数据库访问框架必须具备的功能。流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个流式查询后,数据库访问框架就不负责关闭数据库连原创 2020-11-20 14:34:25 · 3344 阅读 · 2 评论 -
Mybatis 3.5.X 解析LocalDateTime 错误问题
Mybatis 3.5.X 解析localdatetime 错误问题jdk1.8 增加了localdatetime、localdate等,相对于以前的Date 来说,有非常多方便的api,但是如果Mybaits3.5.X等版本在解析locadatetime时会发生错误,java.sql.SQLFeatureNotSupportedException通常解决方法是直接添加依赖: <dependency> <groupId>com.fasterxml.jackson.da原创 2021-04-28 20:40:51 · 1733 阅读 · 1 评论 -
MyBatis批量插入几千条数据,请慎用foreach
近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis中批量插入数据。mapper configuration是用foreach循环做的,差不多是这样。(由于项目保密,以下代码均为自己手写的demo代码)<insert id="batchInsert" parameterType="java.util.List"> insert into USER (id, name) values <foreach collection=原创 2021-11-19 11:46:35 · 2768 阅读 · 0 评论 -
复习下mybatis 中 useGeneratedKeys 和 keyProperty 含义
今天突然碰到这个错误,让我复习下mybatis 中 useGeneratedKeys 和 keyProperty 含义nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause...原创 2020-04-30 17:58:16 · 9579 阅读 · 5 评论 -
千言万语汇总的Mybatis-plus常用API全套教程
前言官网:https://baomidou.com/创建数据库数据库名为mybatis_plus创建表创建user表DROP TABLE IF EXISTS user;CREATE TABLE user(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARC原创 2021-03-24 00:40:38 · 490 阅读 · 0 评论 -
关于 MyBatis动态sql,这里有 10 种超好用的写法
1. 用来循环容器的标签forEach,查看例子foreach元素的属性主要有item,index,collection,open,separator,close。item:集合中元素迭代时的别名,index:集合中元素迭代时的索引open:常用语where语句中,表示以什么开始,比如以’('开始separator:表示在每次进行迭代时的分隔符,close 常用语where语句中,表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须原创 2020-06-16 19:17:04 · 4249 阅读 · 0 评论 -
Mybatis:resultMap的万字使用总结
*resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如**查询到**几个表中数据)*映射*到一个结果集当中。httphttps。原创 2021-11-23 16:19:51 · 3776 阅读 · 0 评论