MyBatis
文章平均质量分 85
MyBatis系列教程及源码解析
Java识堂
这个作者很懒,什么都没留下…
展开
-
Mybatis源码解析:JDBC用法一览
JDBC相关的基础知识在正式分析mybatis源码之前,我们需要对JDBC的api有一个比较清晰的认识,因为mybatis就是基于JDBC的封装,理解了这些常用的api,能提高我们阅读源码的速度。JDBC的所有编程接口包含在java.sql和javax.sql这2个包中相关类作用DriverManager驱动管理器,加载JDBC驱动,获得数据库连接DataSource代表特定数据源,修改DataSource的属性,就可以获取不同数据源的Connection对象,JDBC.原创 2016-11-18 20:01:35 · 859 阅读 · 0 评论 -
Mybatis源码解析:MyBatis用法一览
Mybatis的前世今生mybatis是在ibatis的基础上升级来的,因此mybatis的发展阶段主要可以分为2个阶段。我们先来演示一下ibatis阶段的用法mybatis-config.xml<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> &l.原创 2017-10-09 19:15:10 · 786 阅读 · 0 评论 -
Mybatis源码解析:聊聊那些实用的工具类
ScriptRunner和SqlRunner在Mybatis中提供了大量实用的工具类,这些工具类不仅能用在Mybatis中,也可以把这些工具类拷贝出来,放到我们的项目中,方便开发,下面我们就来看看有哪些实用的工具类ScriptRunner执行sql脚本,执行建表等操作SqlRunner执行sql语句当我们执行单测的时候,就可以利用这2个类将测试环境恢复出来MetaObject和MetaClassMetaObject和MetaClass是和反射相关的2个类使用MetaObject可以很方便的获.原创 2021-12-11 16:52:32 · 734 阅读 · 0 评论 -
Mybatis源码解析:配置解析流程
解析配置在我看mybatis源码的时候,大部分代码还是很简单的,DefaultResultSetHandler这个类是最难的,没有之一,debug了很多遍,还是没太搞懂,基于ResultSetHandler也并不是很重要,所以本系列我就不会写ResultSetHandler的内容了mybatis解析配置阶段的代码还是比较简单的,基本上就是对配置文件中的各种属性进行解析,然后将值保存到Configuration对象中,因此直接画个流程图就略过了。比较重要的过程,比如sql的解析过程我会单开一节来分析解.原创 2020-02-25 20:51:35 · 1090 阅读 · 0 评论 -
Mybatis源码解析:SQL解析流程
XMLLanguageDriver:默认的LanguageDriver,可以处理动态sql和静态sqlRawLanguageDriver:只可以处理静态sqlXMLScriptBuilder#parseScriptNodeXMLScriptBuilder#parseDynamicTags标签作用IfSqlNode将if标签的内容转为IfSqlNodeWhereSqlNode将where标签的内容转为WhereSqlNodeTextSqlNode静态为含有.原创 2021-12-11 14:40:25 · 2510 阅读 · 1 评论 -
Mybatis源码解析:SQL执行流程
各种Executor的作用在前面的文章中我们演示了通过SqlSession来执行sql,其实SqlSession只是一个api类,主要是为了方便用户的使用,典型的门面模式Executor通过操作StatementHandler来执行sql,并返回结果,因此Executor起到了一个承上启下的作用在mybatis中最重要的组件有如下4个Executor:驱动sql执行StatementHandler:调用Statement执行sqlParameterHandler:给执行的sql设置参数R.原创 2021-12-12 16:15:43 · 1514 阅读 · 0 评论 -
Mybatis源码解析:为什么一级缓存和二级缓存都不建议使用?
介绍要想了解缓存,就必须得了解一下Executor,这个Executor是干嘛的呢?你可以理解为要执行的SQL都会经过这个类的方法,在这个类的方法中调用StatementHandler最终执行SQLExecutor的实现也是一个典型的装饰者模式我相信你已经看出来,SimpleExecutor,BatchExecutor是具体组件实现类,而CachingExecutor是具体的装饰器。可以看到具体组件实现类有一个父类BaseExecutor,而这个父类是一个模板模式的典型应用,操作一级缓存的操作都在.原创 2020-02-26 20:55:29 · 1972 阅读 · 3 评论 -
Mybatis源码解析:参数处理器是如何兼容这么多种类型的参数?
Mybatis之前的参数处理方式org.apache.ibatis.executor.SimpleExecutor#doQueryorg.apache.ibatis.scripting.defaults.DefaultParameterHandler#setParameters这个方法包含了所有参数处理器设置对象的逻辑,传入的参数种类比较多我们一个一个分析boundSql.hasAdditionalParameter(propertyName)sql中有foreach标签// 当参数为.原创 2021-12-11 20:21:51 · 1633 阅读 · 0 评论 -
Mybatis源码解析:动态代理让sql执行更安全高效
Mybatis为什么要使用动态代理对SqlSession进行增强?SqlSession sqlSession = sqlSessionFactory.openSession(true);UserInfo userInfo = sqlSession.selectOne("org.apache.ibatis.atest.UserInfoMapper.selectById", 1);这种方式有什么缺点呢?调用的方法有可能写错,实际要执行的sql并没有配置传入的参数有可能写错,因为入参是Object类.原创 2020-02-25 23:54:58 · 964 阅读 · 0 评论 -
Mybatis源码解析:强大的插件是如何工作的?
介绍我之前有篇文章大概写了一下mybatis插件的实现原理Mybatis只写了接口,为什么能运行?Mybaits插件的实现主要用了责任链模式和动态代理动态代理可以对SQL语句执行过程中的某一点进行拦截,当配置多个插件时,责任链模式可以进行多次拦截,责任链模式的UML图如下可以看到在一条责任链中,每个Handler对象都包含对下一个Handler对象的引用,一个Handler对象处理完...原创 2020-02-21 21:55:07 · 965 阅读 · 0 评论 -
Mybatis源码解析:Mybatis如何和Spring进行整合?
Mybatis整合Spring比较重要的几个类@Configuration@MapperScan("com.javashitang.blog.dao")public class MybatisConfig { @Bean public DataSource dataSource() { DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName("com.mysql.jdbc.D.原创 2021-12-12 19:48:08 · 934 阅读 · 0 评论 -
Mybatis源码解析:事务管理
Mybatis事务管理和Spring整合后的事务管理一般还是由spring框架中的DataSourceTransactionManager来进行事务管理参考博客原创 2021-12-17 12:38:17 · 1340 阅读 · 0 评论 -
Mybatis源码解析:Mybatis是如何兼容这么多日志框架的?
配置打印sql在mybatis-config.xml中settings标签增加日志框架,可选的日志框架如下SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN"原创 2020-02-22 20:42:49 · 753 阅读 · 0 评论 -
MyBatis设置主键回填
介绍useGeneratedKeys设置为true,keyProperty为要回填的属性名<insert id="insertBook" useGeneratedKeys="true" keyProperty="id"> insert into t_book (b_name,author) values (#{name},#{author});</insert>...原创 2019-10-29 10:41:34 · 2823 阅读 · 0 评论