MyBatis源码解析【2】构建项目
有了之前的准备,今天就要开始构建学习使用的项目了。废话不多说。开始吧。
首先我用IDEA构建了一个空的maven项目,然后加入了Mybatis的依赖。
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
</dependencies>
需要说明的是这个3.4.4的包虽然是官方提供的,但是一些国内的镜像仓库可能没有,需要多找找。然后需要进行设置才能自动的加载依赖和源码,在IDEA中设置如下
这些设置完成之后,需要用的东西基本都已经有了。
MyBatis的基本构成
以前,我们都是直接去使用MyBatis,直接拿它配置一下,然后连接一下数据库,然后查个数据,回来就好了。
但是这次我们需要深入的去了解,在构建项目时就要顺便理解它的基本构成,为以后的分析打下基础。
核心组件:
1、SqlSessionFactoryBuilder 按照字面来翻译就是,结构化查询语言会话工厂建造者。
顾名思义它是一个工厂的建造者,这个工厂的名字呢就是sql会话,主要的功能当然是建造工厂啦。
2、SqlSessionFactory 这就是那个工厂咯
那么工厂的主要功能自然是产生产品,那么这个工厂生产的就是名叫:SqlSession的产品。
3、SqlSession 这个就是那个产品
这个产品就是我们操作的关键了,我们一般呢,就只能告诉工厂干什么,怎么干,最后我们操作的呢就是这个产品了。
他的功能是:执行SQL语句并返回相应的结果。
4、SqlMapper 一个MyBatis的一个新产品,可以由上面那个SqlSession获取。以XML文件的形式存在。
以上就是MyBatis的基本构成,核心组件,以及这些组件之间的关系,后面我们会用到。
构建最原始的MyBatis
下面将构建一个最原始的,至带有一个查询的,整一个过程的Demo(之前用在项目里面全都是带有Spring的项目,所以根本就没有见过最原始的MyBatis的看下去)
我根据官网的入门来一步步配置
1、先是使用xml构建我们的工厂
2、构建我们的mapper
3、构建我们的产品,也就是会话sqlsession
4、使用我们的会话去查询
下面只是随便截一下图,具体步骤都是按照官网来走的。





需要注意的是,因为需要连接mysql,所以需要导入连接mysql的依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>到此为止一个最基本的最简单的Demo已经完成了。
总结
经过最基本的构建,我已经基本明确了这几个核心组件究竟是干什么用的了。
相信你也对这几个组件已经不陌生了,那么接下来我们将慢慢分析这个那么简单的例子中,究竟藏了多少秘密。
这里提出几个问题需要仔细思考。后面研究时需要用到。
1、工厂是干嘛的?
2、工厂建立一个够不够?在多线程下需要创建多个吗?
3、工厂是否每次执行一次sql就需要生产一个产品?
4、为什么要使用工厂这样的设计?
5、为什么mapper的只有一个接口,没有实现也可以用。
6、最后返回的结果和实体间的映射是如何完成的?
这些问题都会在后面的研究中一一进行解释
MyBatis源码解析【2】构建项目的更多相关文章
- 【MyBatis源码解析】MyBatis一二级缓存
MyBatis缓存 我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级),尤其是对于一些相 ...
- mybatis源码-解析配置文件(三)之配置文件Configuration解析
目录 1. 简介 1.1 系列内容 1.2 适合对象 1.3 本文内容 2. 配置文件 2.1 mysql.properties 2.2 mybatis-config.xml 3. Configura ...
- Mybatis源码解析,一步一步从浅入深(一):创建准备工程
Spring SpringMVC Mybatis(简称ssm)是一个很流行的java web框架,而Mybatis作为ORM 持久层框架,因其灵活简单,深受青睐.而且现在的招聘职位中都要求应试者熟悉M ...
- Mybatis源码解析,一步一步从浅入深(四):将configuration.xml的解析到Configuration对象实例
在Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码中我们看到了XMLConfigBuilder(xml配置解析器)的实例化.而且这个实例化过程在文章:Mybatis源码解析,一步一步从浅 ...
- Mybatis源码解析(一) —— mybatis与Spring是如何整合的?
Mybatis源码解析(一) -- mybatis与Spring是如何整合的? 从大学开始接触mybatis到现在差不多快3年了吧,最近寻思着使用3年了,我却还不清楚其内部实现细节,比如: 它是如 ...
- Mybatis源码解析(三) —— Mapper代理类的生成
Mybatis源码解析(三) -- Mapper代理类的生成 在本系列第一篇文章已经讲述过在Mybatis-Spring项目中,是通过 MapperFactoryBean 的 getObject( ...
- Mybatis源码解析(二) —— 加载 Configuration
Mybatis源码解析(二) -- 加载 Configuration 正如上文所看到的 Configuration 对象保存了所有Mybatis的配置信息,也就是说mybatis-config. ...
- Mybatis源码解析3——核心类SqlSessionFactory,看完我悟了
这是昨晚的武汉,晚上九点钟拍的,疫情又一次来袭,曾经熙熙攘攘的夜市也变得冷冷清清,但比前几周要好很多了.希望大家都能保护好自己,保护好身边的人,生活不可能像你想象的那么好,但也不会像你想象的那么糟. ...
- Mybatis源码解析-DynamicSqlSource和RawSqlSource的区别
XMLLanguageDriver是ibatis的默认解析sql节点帮助类,其中的方法其会调用生成DynamicSqlSource和RawSqlSource这两个帮助类,本文将对此作下简单的简析 应用 ...
- mybatis源码-解析配置文件(四-1)之配置文件Mapper解析(cache)
目录 1. 简介 2. 解析 3 StrictMap 3.1 区别HashMap:键必须为String 3.2 区别HashMap:多了成员变量 name 3.3 区别HashMap:key 的处理多 ...
随机推荐
- 响应式网站-全屏banner响应的2中方法 - 被吃掉的banner
通常来讲, 设计师们喜欢把banner设计成全屏(1920px或以上) 主题内容控制在一定的范围内一般在1200px左右 这样的设计即可以在宽屏上的表现很好.也能向下兼容一些小屏幕的设备: 如下图(所 ...
- Json及Json字符串
JSON(JavaScript Object Notation)是一种独立于开发语言的用于存储和交换文本数据的格式,JSON 语法是JavaScript 语法的子集. Json 可以保存数组格式和对象 ...
- Java基础知识二次学习--第四章 异常
第四章 异常处理 时间:2017年4月26日11:16:39~2017年4月26日11:28:58 章节:04章_01节 04章_02节 视频长度:20:46+01:16 内容:异常的概念 心得: ...
- JDBC与JNDI的区别
程序员开发时,知道要开发访问MySQL数据库的应用,于是将一个对 MySQL JDBC 驱动程序类的引用进行了编码,并通过使用适当的 JDBC URL 连接到数据库. 就像以下代码这样: Connec ...
- javaWeb学习总结(8)- jsp指令(3)
一.JSP指令简介 一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定 ...
- Unity 遮罩 点击panel以外的位置,panel关闭
public Class Panel_ATMRechage : IPanel{ private Dictionary<string,UISprite>mSprites; } protect ...
- 细说"回车"和"换行"的故事
引言 最近在php还有c#以及memcache的shell当中经常看到\r\n的写法,刚开始还没注意, 不过后面感觉这样写有些不对头,\r表示回车 \n表示换行,那这样不是换行了两次吗? 为了解决疑 ...
- 《HelloGitHub》第 14 期
公告 欢迎通过在 GitHub 上新建 issues 方式推荐项目,我真心希望读者可以在 HelloGItHub,找到真正的编程乐趣! <HelloGitHub>第 14 期 兴趣是最好的 ...
- Python教程(2.4)——字符串
2.2节讲过,Python中有字符串类型.在Python中,字符串用'或"括起,例如'abc'."qwerty"等都是字符串.注意'和"并不是字符串的内容. A ...
- 搭建rtmp直播流服务之3:java开发ffmpeg实现rtsp转rtmp并实现ffmpeg命令的接口化管理架构设计及代码实现
上一篇文章简单介绍了java如何调用ffmpeg的命令:http://blog.csdn.net/eguid_1/article/details/51777716 上上一篇介绍了nginx-rtmp服 ...

