Mybatis源码分析

Mybatis源码分析


第一章、回顾
1. 课程中工具的版本
1. JDK8
2. IDEA2018.3
3. Maven3.5.3
4. MySQL 5.1.48 --> MySQL 5Mybatis 3.4.6
2. Mybatis开发的简单回顾
1. Mybatis做什么?Mybatis是一个ORM类型框架,解决的数据库访问和操作的问题,对现有JDBC技术的封装。
2. Mybaits搭建开发环境 1. 准备jar<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.48</version></dependency>2. 准备配置文件a. 基本配置文件 mybatis-config.xml1. 数据源的设置 environments2. 类型别名3. mapper文件的注册b. Mapper文件1. DAO规定方法的实现 --> SQL语句 3. 初始化配置 mybatis-config.xml配置 environment
3. 开发步骤 7步1. entity2. 类型别名3. table 4. DAO接口5. Mapper文件6. Mapper文件的注册7. API编程 
  • 核心代码分析

    InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();两种方式功能等价 
    实现效果 区别 那种方式好?第一种方式好 表达概念更清晰 第一种开发,本质上就是对第二种开发的封装。(代理设计模式)UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
    List<User> users = userDAO.queryAllUsers();List<User> users = sqlSession.selectList("com.baizhiedu.dao.UserDAO.queryAllUsers");String name = "huxz";public class User{private String name = "huxz";
    }
    
第二章、Mybaits的核心对象
1. Mybatis的核心对象及其作用

在这里插入图片描述

1. 数据存储类对象概念:在Java中(JVM)对Mybatis相关的配置信息进行封装mybatis-config.xml ----> ConfigurationConfiguration 1. 封装了mybatis-config.xml2. 封装了mapper 文件  MappedStatement3. 创建Mybatis其他相关的对象 XXXDAOMapper.xml ----> MappedStatement(形象的认知,不准确)操nt对象 对应的就是 Mapper文件中的一个一个的 配置标签 <select id. -----> MappedStatement<insert id. -----> MappedStatement 注定 一个Mybatis应用中 N个MappedStament 对象 MappedStatment ---> Configuration MappedStatment 中 封装SQL语句 ---> BoundSql
2. 操作类对象 (SqlSession) ---> 门面 ExcutorExcutor 是Mybatis中处理功能的核心1. 增删改update  查query2. 事务操作 提交 回滚3. 缓存相关的操作Excutor接口 BatchExcutorJDBC中批处理的操作, BatchExcutor ReuseExcutor目的:复用 Statement insert into t_user(ID,name)values(1,‘孙帅’);insert into t_user(ID,name)values(2,‘孙帅1’);SimpleExcutor常用Excutor Mybatis推荐 默认 Configuration protected ExecutorType defaultExecutorType = ExecutorType.SIMPLE;StatmentHandlerStatementHandler是Mybatis封装了JDBC Statement,真正Mybatis进行数据库访问操作的核心功能:增删改差StatementHandler接口SimpleStatementHandlerJDBC 操作 PreparedStatementHandlerCallableStatementHandler ParameterHandler目的:Mybatis参数 ---》 JDBC 相关的参数 @Param ---> #{} --- > ?ResultSetHandler目的:对JDBC中查询结果集 ResultSet 进行封装 TypeHandlerJava程序操作 数据库Java类型   数据库类型String    varcharint       numberint       int 

在这里插入图片描述

在这里插入图片描述

2. Mybatis的核心对象 如何与SqlSession建立的联系?
Mybatis源码中的这些核心对象 在 SqlSession调用对应功能时候建立联系 SqlSession.insert()DefaultSqlSessionExctutorStatmentHandler 
SqlSession.update()
SqlSession.delete()
SqlSession.selectOne();
...底层  SqlSession.insert()SqlSession.update()SqlSession.delete()....应用层面:UserDAO userDAO =  SqlSession.getMapper(UserDAO.class);//UserDAO接口的实现类的对象 //疑问? UserDAO接口实现类 在哪里?//动态字节码技术 ---> 类 在JVM 运行时创建 ,JVM运行结束后,消失了 //动态字节码技术 1. 如何 创建 UserDAO XXXDAO接口的实现类 代理 (动态代理)a. 为原始对象(目标)增加【额外功能】 b. 远程代理 1.网络通信 2.输出传输 (RPCDubbo c. 接口实现类,我们看不见实实在在的类文件,但是运行时却能体现出来。无中生有Proxy.newProxyIntance(ClassLoader,Interface,InvocationHandler)2. 实现类 如何进行实现的             interface UserDAO{List<User> queryAllUsers();         save(User user)}UserDAOImpl implements UserDAO{queryAllUsers(){sqlSession.select("namespace.id",参数)|-Excutor|-StatementHandler|- ParameterHandler , ResultSetHandlerTypeHandler }save(){sqlSession.insert("namespace.id",参数)}}userDAO.queryUserById()userDAO.queryUsers();MyBatis 完成代理创建 核心类型 ---> DAO接口的实现类 MapperProxy implements InvocationHandler DAO接口ClassSqlSession invokeSqlSession.insert updatedeleteselectOneselectListSqlCommand:1. id = namespace.id2. type = insert|delete|select SqlSession.insert()SqlSession.delete....MapperProxyFactoryProxy.newProxyInstrace()

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

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

相关文章

Manifest merger failed with multiple errors, see logs

问题 Manifest merger failed with multiple errors, see logs详细问题 笔者进行Android 项目开发&#xff0c;修改AndroidManifest.xml代码后&#xff0c;控制台报错 AndroidManifest.xml报错核心代码 <manifest><uses-permission android:name"android.perm…

[03] Vue指令(2)

目录 属性绑定指令(v-bind)列表渲染指令(v-for)v-for中的key 双向绑定指令(v-model) 属性绑定指令(v-bind) 作用&#xff1a;动态设置html的标签属性&#xff0c;比如&#xff1a;src、url、title语法&#xff1a;v-bind:属性名“表达式”v-bind:可以简写成 > : 比如&…

C语言函数调用的流程

函数调用时&#xff0c;进程的上下文会切换到被调函数&#xff0c;当被调函数执行完毕之后再切换回去 函数调用时代码的执行流程

电子商务跨境电商大数据的关键技术之—主流电商大数据采集

大数据采集是指通过各种技术手段和工具收集、获取和提取大规模数据的过程。在信息时代&#xff0c;各种互联网、物联网、移动设备等的普及和应用&#xff0c;产生了海量的数据&#xff0c;这些数据被称为大数据。大数据采集就是对这些数据进行收集和抓取&#xff0c;以获得有意…

SpringBoot+Vue项目部署上线

部署前准备 注册京东云 京东云: https://www.jdcloud.com/ 117.72.32.65vue本地部署 新建文件.env.development VUE_APP_BASEURLhttp://localhost:9191新建文件 .env.production VUE_APP_BASEURLhttp://117.72.32.65:9191main.js 设置全局变量$baseUrl Vue.prototype.$baseUrl…

精品springboot基于大数据的电脑主机硬件选购助手-可视化大屏

《[含文档PPT源码等]精品基于springboot基于大数据的电脑主机硬件选购助手[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; Java——涉及技术&#xff1a; 前端使用技术&a…

11.【CPP】模版(深入理解模版的实例化,从编译链接的原理理解模版为何无法分离编译)

非类型模版参数 1.模版参数分为类型模版参数和非类型模版参数&#xff0c;非类型模版参数一般都是整形常量&#xff08;整形&#xff1a;size_t,int,char等&#xff09; 2.浮点数、类对象以及字符串是不允许作为非类型模版参数的。非类型模版的参数必须在编译的时候就能确定结…

从汇编角度解释线程间互斥-mutex互斥锁与lock_guard的使用

多线程并发的竞态问题 我们创建三个线程同时进行购票&#xff0c;代码如下 #include<iostream> #include<thread> #include<list> using namespace std; //总票数 int ticketCount100; //售票线程 void sellTicket(int idx) {while(ticketCount>0){cou…

C++ 多起点的bfs(五十九)【第六篇】

今天我们来学习多起点的bfs 1.多起点的bfs 在普通的广度优先搜索问题中&#xff0c;为了得到从初始状态到达目标状态的最小操作数&#xff0c;则将初始状态放入队列中。离初始状态由近及远地不断扩展出新的状态&#xff0c;直到搜索到目的状态&#xff0c;或队列为空&#xff…

【网络安全】什么样的人适合学?该怎么学?

有很多想要转行网络安全或者选择网络安全专业的人在进行决定之前一定会有的问题&#xff1a; 什么样的人适合学习网络安全&#xff1f;我适不适合学习网络安全&#xff1f; 当然&#xff0c;产生这样的疑惑并不奇怪&#xff0c;毕竟网络安全这个专业在2017年才调整为国家一级…

解锁Spring Boot中的设计模式—03.委派模式:探索【委派模式】的奥秘与应用实践!

委派模式 文章目录 委派模式1.简述**应用场景****优缺点****业务场景示例** 2.类图3.具体实现3.1.自定义注解3.2.定义抽象委派接口3.3.定义具体执行者3.4.定义委派者(统一管理委派任务)3.5.定义委派者管理类 4.测试4.1.controller层4.2.测试不同场景4.2.1.测试生产部门计算费用…

MCU看门狗

目录 一、独立看门狗(IWDG) 1、IWDG 主要作用 2、IWDG 主要特性 3、编程控制 4、注意地方 二、窗口看门狗(WWDG) 1、窗口看门狗作用&#xff1a; 2、窗口看门狗产生复位信号有两个条件&#xff1a; 3、WWDG 框图 4、WWDG 将要复位的时间 5、编程控制 一、独立看门…