- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MyBatis源码分析-SQL语句执行的完整流程课案
MyBatis源码分析-SQL语句执行的完整流程
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。如何新建MyBatis源码工程请点击MyBatis源码分析-IDEA新建MyBatis源码工程。
MyBatis框架主要完成的是以下2件事情:
根据JDBC规范建立与数据库的连接。
通过反射打通Java对象与数据库参数交互之间相互转换的关系。
MyBatis框架是一种典型的交互式框架,先准备好交互的必要条件,然后构建一个交互的环境,在交互环境中划分会话,在会话中与数据库进行交互数据。
1 MyBatis主要的类
Configuration MyBatis所有的配置信息都维持在Configuration对象之中。
SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所需要的参数,
ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
TypeHandler 负责java数据类型和jdbc数据类型之间的映射和转换
MappedStatement MappedStatement维护了一条select|update|delete|insert节点的封装,
SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
BoundSql 表示动态生成的SQL语句以及相应的参数信息
以上几个类在SQL操作中都会涉及,在SQL操作中重点关注下SQL参数什么时候写入和结果集怎么转换为Java对象,这两个过程正好对应的类是PreparedStatementHandler和ResultSetHandler类。
(图片来自《深入理解mybatis原理》 MyBatis的架构设计以及实例分析)
2 SQL执行流程
MyBatis主要设计目的还是为了让我们在执行SQL时对输入输出的数据的管理更加方便,所以方便的让我们写出SQL和方便的获取SQL的执行结果是MyBatis的核心竞争力。下面就用一个例子来从源码角度看一下SQL的完整执行流程。
新建配置文件conf.xml:
conf.xml
首先建立数据表,这里就以user表为例 :
复制代码
DROP TABLE IF EXISTS user;
CREATE TABLE user (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32) NOT NULL,
password VARCHAR(32) NOT NULL,
sex int,
email VARCHAR(32),
phone VARCHAR(16),
admin VARCHAR(16)
);
复制代码
然后新建与数据表对应的类User:
User
再新建usre表的配置文件:
userMapper.xml
最后新建测试类:
复制代码
/**
* MyBatis测试类
*/
public class TestMain {
public static void main(String[] args) throws IOException {
String resouce = conf.xml;
InputStream is = Resources.getResourceAsStream(resouce);
// 构建sqlSession工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilde
您可能关注的文档
- MSP430I2C通信课案.ppt
- 凤凰职教第三册unit6电子教案课件.doc
- MSP430程序库九数码管显示课案.doc
- MSP430程序库七按键.doc
- 凤凰路管道拆除方案.doc
- MSP430的C语言程序设计.ppt
- MSP430程序库十四DMA程序库.doc
- MSP430程序库四printf和scanf函数移植.doc
- MSTP精华.doc
- MotorSolve使用指导.doc
- 2025年贵州工业职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 2025年西昌民族幼儿师范高等专科学校高职单招职业适应性测试近5年常考版参考题库含答案解析.docx
- 2025年西藏警官高等专科学校高职单招语文2018-2024历年参考题库频考点含答案解析.docx
- 2025年贵州工商职业学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
- 2025年贵州工商职业学院高职单招职业适应性测试近5年常考版参考题库含答案解析.docx
- 2025年贵州农业职业学院高职单招数学历年(2016-2024)频考点试题含答案解析.docx
- 2025年贵州工商职业学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 2025年贵州工商职业学院高职单招语文2018-2024历年参考题库频考点含答案解析.docx
- 2025年许昌职业技术学院高职单招数学历年(2016-2024)频考点试题含答案解析.docx
- 2025年许昌职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
最近下载
- 提高小学生英语写作能力的有效途径教学研究课题报告.docx
- 2022《探索文本解读的路径》读后感.docx VIP
- 重庆市第八中学校 2023-2024学年八年级下学期期中英语试题(含答案+听力原文 无听力音频).pdf VIP
- 高考英语词汇3500电子版.pdf
- 2025年蛇年春节放假通知海报(word版,可修改).docx
- 部编版六年级语文下册《北京的春节》教学设计.doc VIP
- 捷宝闪光灯TR-950说明书.pdf
- Hisense海信容声冰箱BCD-221WD16NY用户手册说明书.pdf
- 喝酒事故案例分析报告总结.docx VIP
- 【培训课件】建筑与市政工程施工现场临时用电安全技术标准JGJT46-2024.pptx
文档评论(0)