![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Mybatis
文章平均质量分 88
槑!
这个作者很懒,什么都没留下…
展开
-
【MyBatis】Spring集成原理(四):分析注入 MapperProxy
我们已经分析了 MyBatis 是如何实现自定义注册 Mapper 接口到 IOC 容器中的,最后我们看到 BeanDefinition 中实际保存的是 MapperFactoryBean.class。可以看到 MapperFactoryBean 实现了 FactoryBean 接口(表明是一个工厂bean),所以 getBean() 最终返回的并不是它自己,而是 getObject 中创建的对象。PS:关于 FactoryBean 可以参考 【Spring】IOC&DI:FactoryBe原创 2021-02-28 00:54:21 · 275 阅读 · 0 评论 -
【MyBatis】Spring集成原理(三):MapperFactoryBean 与 SqlSessionTemplate
在 Spring 里面,我们不是直接使用 DefaultSqlSession 的,而是对它进行了一个封装,这个 SqlSession 的实现类就是SqlSessionTemplate。这个跟 Spring 封装其他的组件是一样的,比如 JdbcTemplate,RedisTemplate 等等,也是 Spring 跟 MyBatis 整合的最关键的一个类。为什么不用直接使用 DefaultSqlSession?DefaultSqlSession 是线程不安全的。因为 SqlSession 的生命周期是原创 2021-02-28 00:54:04 · 839 阅读 · 0 评论 -
【MyBatis】Spring集成原理(二):分析注入 MapperScannerConfigurer
在上一篇我们分析了 Spring 中不再使用 DefaultSqlSession 因为它是线程不安全的,而是自己实现了一个线程安全 SqlSessionTemplate。按照编程式使用的套路,拿到 SqlSession 后就可以去操作数据库了,所以我们演示通过 SqlSessionDaoSupport 去获取 SqlSessionTemplate 操作数据库。但是这么做仍然存在代码冗余(需要手动创建Mapper实现类去获取SqlSessionTemplate)和硬编码的问题(指定 StatementID,原创 2021-02-28 00:53:52 · 477 阅读 · 1 评论 -
【MyBatis】Spring集成原理(一):分析注入 SqlSessionFactoryBean
在上一篇我们演示了 Spring 如何整合 MyBatis;那么问题来了,会话工厂 SqlSessionFactory 是什么时候创建的?为了解开其中奥秘,我们就从 Spring 集成时配置的 SqlSessionFactoryBean 源码看起…SqlSessionFactoryBeanSqlSessionFactoryBean 从名字就能看出来它是用来创建工厂类的,继承关系如下:其中,InitializingBean 接口为 bean 提供了初始化方法的方式,它只包括 afterProperti原创 2021-02-27 20:24:10 · 1027 阅读 · 0 评论 -
【MyBatis】Spring 集成 MyBatis 及问题分析
在 【MyBatis】基本使用(一):编程式使用(单用)及核心对象生命周期 一文中我们看到了如何单独使用 mybatis,但在实际开发中我们却很少单独使用它,而是整合到 Spring 中去使用。经过前面几篇文章的分析,我们已经了解了 mybatis 的底层执行原理,认识了 mybatis 原生API 中三个核心对象:SqlSessionFactory、SqlSession、MapperProxy。【MyBatis】执行原理(一):创建会话工厂(SqlSessionFactory) --配置解析源码分原创 2021-02-27 20:23:25 · 125 阅读 · 0 评论 -
【Mybatis】延迟加载原理
延迟加载延迟加载如何使用Setting 参数配置设置参数描述有效值默认值lazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。true、falsefalseaggressiveLazyLoading当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载(参考lazyLoadTriggerMethods).true、falsefalse原创 2021-02-27 20:18:25 · 840 阅读 · 0 评论 -
【Mybatis】ResultSetHandler 封装对象流程
ResultSetHandler前言结果封装原理<resultMap type="Person" id="resultPersonMap"> <result property="id" column="id"/> <result property="username" column="username"/> <result property="password" column="password"/> <result原创 2021-02-27 20:17:49 · 273 阅读 · 0 评论 -
【Mybatis】PageHelper 分页插件原理
PageHelper 分页插件原理1. PageHelper的maven依赖及插件配置<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.6</version></dependency>PageHelper除了本身的jar包外,它还依赖了一个叫j原创 2021-02-27 20:17:04 · 576 阅读 · 0 评论 -
【MyBatis】插件机制源码解析
插件机制详解MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。那么拦截器拦截MyBatis中的哪些内容呢?概述MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis允许使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) 拦截执行器的方法ParameterH原创 2021-02-27 20:16:26 · 385 阅读 · 0 评论 -
【Mybatis】缓存机制源码解析
前言MyBatis是常见的Java数据库访问层框架。在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足之处,在使用中容易引起脏数据,形成一些潜在的隐患。个人在业务开发中也处理过一些由于MyBatis缓存引发的开发问题,带着个人的兴趣,希望从应用及源码的角度为读者梳理MyBatis缓存机制。本次分析中涉及到的代码和数据库表均放在GitHub上,地址: mybatis-cache-demo 。目录本文按照以下顺序展开。一级缓存介绍及相关配置。一原创 2021-02-27 20:15:35 · 242 阅读 · 0 评论 -
【Mybatis】一级、二级缓存机制
一级缓存一级缓存配置我们来看看如何使用MyBatis一级缓存。开发者只需在MyBatis的配置文件中,添加如下语句,就可以使用一级缓存。共有两个选项,SESSION或者STATEMENT,默认是SESSION级别,即在一个MyBatis会话中执行的所有语句,都会共享这一个缓存。一种是STATEMENT级别,可以理解为缓存只对当前执行的这一个Statement有效。<setting name="localCacheScope" value="SESSION"/>一级缓存实验接下来通过实原创 2021-02-27 20:10:58 · 218 阅读 · 0 评论 -
【Mybatis】动态 SQL 源码解析
动态SQL解析原理我们在使用mybatis的时候,会在xml中编写sql语句。比如这段动态sql代码:<update id="update" parameterType="org.format.dynamicproxy.mybatis.bean.User"> UPDATE users <trim prefix="SET" prefixOverrides=","> <if test="name != null and name != ''"&g原创 2021-02-27 20:10:12 · 528 阅读 · 0 评论 -
【Mybatis】动态 SQL 特性
动态SQL使用动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL 元素可原创 2021-02-27 20:03:51 · 133 阅读 · 0 评论 -
【Mybatis】Mapper 注册与绑定源码解析
ybatis源码分析之Mapper注册与绑定我们都知道 Mapper 是一个接口,它的每个方式是我们与数据库交互的入口,每个 Mapper 都有与之相对应的一个 XML 文件,我们可以在 XML 里面自由快活地写 sql,当然我们也可以用注解的形式写在接口方法上,但终究还是没 XML 灵活,那么问题来了,Mybatis 是如何注册与绑定 Mapper 的呢?下面我带你揭开这个神秘的面纱。首先我们来看看用 Mybatis 执行 sql 的两种方法直接操作 SqlSession 方法publ原创 2021-02-26 23:56:45 · 530 阅读 · 0 评论 -
【MyBatis】执行原理(四):MapperProxy执行SQL源码分析
通过前三篇的分析,我们已经了解了 SqlSessionFactory,SqlSession,MapperProxy 底层的逻辑【MyBatis】执行原理(一):创建会话工厂(SqlSessionFactory) --配置解析源码分析【MyBatis】执行原理(二):创建会话(SqlSession) 源码分析【MyBatis】执行原理(三):获取代理对象(MapperProxy) 源码分析String resource = "mybatis-config.xml"; InputStream in原创 2021-02-26 23:51:36 · 384 阅读 · 0 评论 -
【MyBatis】执行原理(三):获取代理对象(MapperProxy) 源码分析
通过前两篇的分析,我们已经了解了 SqlSessionFactory,SqlSession 底层的逻辑【MyBatis】执行原理(一):创建会话工厂(SqlSessionFactory) --配置解析源码分析【MyBatis】执行原理(二):创建会话(SqlSession) 源码分析String resource = "mybatis-config.xml"; InputStream inputStream = Resources. getResourceAsStream(resource);原创 2021-02-26 23:50:35 · 612 阅读 · 1 评论 -
【MyBatis】执行原理(二):创建会话(SqlSession) 源码分析
在上一篇 【MyBatis】执行原理:创建会话工厂–配置解析源码分析 我们已经分析了创建 SqlSessionFactory 的源码,最终得到了一个 DefaultSqlSessionFactory。String resource = "mybatis-config.xml"; InputStream inputStream = Resources. getResourceAsStream(resource); // build 方法最终返回了 SqlSessionFactory 接口的默认实现 De原创 2021-02-26 23:49:56 · 195 阅读 · 0 评论 -
【MyBatis】执行原理(一):创建会话工厂(SqlSessionFactory) 源码分析
要分析 mybatis 的执行原理,首先要搞清楚的就是它如何解析配置文件的。PS:配置文件其实有两种,一个是由许多标签构成的mybatis-config.xml全局配置文件,另一个是可能有多个的Mapper.xml文件。本篇我们只看全局配置文件是如何解析的。在【MyBatis】基本使用(一):编程式使用(单用)及核心对象生命周期 我们说了如何使用 mybatisString resource = "mybatis-config.xml"; InputStream inputStream = Re原创 2021-02-26 23:49:24 · 694 阅读 · 0 评论 -
【MyBatis】配置文件 mybatis-conf.xml 详解
在上一篇 【Mybatis】编程式使用(单用)及核心对象声明周期 我们说了使用 mybatis,但是还有一个问题解决,就是 MyBatis 的配置文件到底能配什么?怎么配?本篇我们就一起来看看。大部分时候我们只需要很少的配置就可以让 MyBatis 运行起来。其实 MyBatis 里面提供的配置项非常多,我们没有配置的时候使用的是系统的默认值。mybatis源码地址…下面是一个 mybatis-conf.xml 示例,包括了我们下来要说的的标签<?xml version="1.0" en原创 2021-02-26 23:48:20 · 847 阅读 · 0 评论 -
【MyBatis】编程式流程及核心对象生命周期
大部分时候,我们都是在Spring里面去集成MyBatis。因为Spring对MyBatis的一些操作进行的封装,我们不能直接看到它的本质,所以先看下不使用容器的时候,也就是编程的方式,MyBatis怎么使用依赖:导入 mybatis 的 jar包。配置文件:全局配置文件,这里面是对 MyBatis 的核心行为的控制。我们常命名为 mybatis-config.xml。放个参考链接 【Mybatis】配置文件 mybatis-conf.xml 详解…映射器文件:通常来说一张表对应一个原创 2021-02-26 23:47:42 · 197 阅读 · 0 评论 -
【MyBatis】架构分层及主要对象
在 MyBatis 的主要工作流程里面,不同的功能是由很多不同的类协作完成的,它们分布在 MyBatis jar 包的不同的 package 里面。我们来看一下 MyBatis 的jar包(基于3.4.6),jar包结构是这样的(21个包):跟Spring一样,MyBatis 按照功能职责的不同,所有的 package 可以分成不同的工作层次1.接口层第一个是跟客户打交道的服务员,它是用来接收程序的工作指令的,我们把它叫做接口层。接口层是我们打交道最多的。核心对象是 SqlSession,它是上原创 2021-02-26 23:46:00 · 437 阅读 · 0 评论 -
操作数据库的三种选择
1.原生JDBC在Java程序里面去连接数据库,最原始的办法是使用JDBC的API。我们先来回顾一下使用JDBC的方式,我们是怎么操作数据库的// 1.注册 JDBC 驱动 Class. forName ("com.mysql.jdbc.Driver");// 2.打开连接 conn = DriverManager. getConnection ( DB _ URL ,USER ,PASSWORD );// 3.获取执行器statementstmt = conn.createStatement原创 2021-02-26 23:37:55 · 223 阅读 · 0 评论