
Mybatis
文章平均质量分 96
架构攻城之路
敢拒绝,还有梦。
有qian,有闲,有成长;
有你,也有我。
展开
-
【Mybatis源码】Mybatis如何为mapper接口生成代理对象--JDK动态代理
引言mybatis版本:3.5.1 mybatis-spring:2.0.1使用过Mybatis框架的开发人员应该都知道,在编写dao层时,只需要提供mapper接口与相应的xxxMapper.xml,无需实现类,便可以将mapper接口对象交由Spring容器管理,疑问:Mybatis是如何为mapper接口生成代理对象的? Mybatis又是如何将mapper对象交给Spring管理?我们在整合mybatis与spring时,都会使用MyBatis-Spring 将 MyBatis原创 2021-01-09 14:27:58 · 4142 阅读 · 11 评论 -
MySQL InnoDB MVCC 机制的原理及实现
什么是 MVCCMVCC (Multiversion Concurrency Control)中文全程叫多版本并发控制,是现代数据库(包括MySQL、Oracle、PostgreSQL等)引擎实现中常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的吞吐性能。如此一来不同的事务在并发过程中,SELECT操作可以不加锁而是通过MVCC机制读取指定的版本历史记录,并通过一些手段保证保证读取的记录值符合事务所处的隔离级别,从而解决并发场景下的读写冲突。下面举一个多版本读的例子,例如两...转载 2020-07-27 10:54:07 · 1133 阅读 · 0 评论 -
SpringBoot集成Mybatis的一级缓存和二级缓存
SpringBoot集成Mybatis几乎已经成为大多数项目的标配了,但在使用的过程中Mybatis的缓存功能往往会被大家遗忘,甚至很多开发者都没意识到在SpringBoot集成Mybatis还有一级缓存和二级缓存的事。本来没计划写本篇文章,但在实践的过程掉坑里了,当从坑中爬起来时,发现有必要给大家写写Mybatis的缓存。遇到什么样的坑事情是这样的:项目中使用了乐观锁,并进行了失败尝试(3次)。但运行的时候发现尝试也是失败的。起初以为是并发问题,然后把尝试次数无限放大,发现次次都是失败的。转载 2020-06-17 16:17:58 · 3735 阅读 · 2 评论 -
使用batch insert解决MySQL的insert吞吐量问题
最近使用了一个非常简单易用的方法解决了业务上的一个insert吞吐量的问题,在此总结一下。首先我们明确一下,insert吞吐量其实并不是指的IPS(insert per second),而是指的RPS(effect rows per second)。其次我们再说一下batch insert,其实顾名思义,就是批量插入。这种优化思想是很基本的,MySQL中最出名的应用就是group c...转载 2020-04-11 14:10:56 · 868 阅读 · 0 评论 -
Mybatis-plus 实践与架构原理图解
mybatis 增强工具包,简化 CURD 操作。启动加载 XML 配置时注入单表 SQL 操作 ,为简化开发工作提供生产率而生。 mybatis-plus 只做增强不做改变,这里不提倡 SQL 写在代码中。Maven 坐标 http://search.maven.org/#search%7Cga%7C1%7Cmybatis-plus<dependency>&l...转载 2020-04-11 11:41:14 · 7620 阅读 · 3 评论 -
MyBatis的工作原理以及核心流程介绍
MyBatis的底层操作封装了JDBC的API,MyBatis的工作原理以及核心流程与JDBC的使用步骤一脉相承,MyBatis的核心对象(SqlSession,Executor)与JDBC的核心对象(Connection,Statement)相互对应。本文的核心观点是:从JDBC入手并立足于JDBC,才能深入的理解MyBatis的工作原理以及核心流程。1、如何掌握MyBatis的工作原理...转载 2020-01-19 17:02:36 · 1046 阅读 · 0 评论 -
MyBatis的前世:JDBC数据库编程
MyBatis是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装。在《 MyBatis学习建议 》里面提到了,入门阶段需要结合JDBC知识,以加深理解MyBatis的工作原理和核心类库。所以,本文在主要内容是围绕JDBC展开的。JDBC是连接数据库和Java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作。1、什么是JDBC?Java数据库连接 Java...转载 2020-01-19 16:47:46 · 247 阅读 · 0 评论 -
MyBatis面试题集锦(精选)
以下来自网络收集,找不到原文出处。此次主要为了面试准备收集,希望对大家有所帮助~~~~1. 简单谈一谈MyBatis?Mybatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使得开发者只需要专注于SQL语句本身,而不用去关心注册驱动,创建connection等Mybatis通过xml文件配置或者注解的方式将要执行的各种statement配置起来,并通过java对象...转载 2020-01-19 09:09:05 · 811 阅读 · 0 评论 -
这谁顶得住?Mybatis 十八连环问
1、#{}和${}的区别是什么?答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置...转载 2020-01-16 14:27:31 · 363 阅读 · 0 评论 -
MyBatis批量插入大量数据(1w以上)--解决方案
问题背景:只用MyBatis中foreach进行批量插入数据,一次性插入超过一千条的时候MyBatis开始报错。项目使用技术:SpringBoot、MyBatis批量插入碰到的问题:java.lang.StackOverflowError: null该问题是由于一次性插入数据1w条引起的,具体插入代码如下:userDao.batchInsert(list);<...转载 2020-01-16 14:19:33 · 9416 阅读 · 0 评论 -
MyBatis与传统jdbc批量新增数据对比
传统JDBC批量插入方法:1.Java代码中使用For循环直接插入SQL数据如:execute()或executeUpdate()方法。2.借助于Statement、Prestatement对象的批处理方法addBatchpublic class jdbcUtil { // 处理数据库事务,批量操作需要手动提交事务 public static void commit(C...转载 2020-01-16 12:00:34 · 1078 阅读 · 0 评论