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、最后返回的结果和实体间的映射是如何完成的?

这些问题都会在后面的研究中一一进行解释

时间: 2024-12-14 17:28:04

MyBatis源码解析【2】构建项目的相关文章

mybatis源码-解析配置文件(三)之配置文件Configuration解析(超详细, 值得收藏)

1. 简介 1.1 系列内容 本系列文章讲解的是mybatis解析配置文件内部的逻辑, 即 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 其背后的逻辑. 1.2 适合对象 了解如何使用 mybatis 来访问数据库.可参看<

二.jQuery源码解析之构建jQuery之构建函数jQuery的7种用法

一:$(selectorStr[,限制范围]),接受一个选择器(符合jQuery规范的字符串),返回一个jQuery对象;二:$(htmlStr[,文档对象]),$(html[,json对象])传入html字符串,创建一个新的dom元素 三:$(dom元素),$(dom元素集合)将dom元素转换成jQuery对象.四:$(自定义对象)封装普通对象为jQuery对象.五:$(回调函数)绑定ready事件监听函数,当Dom加载完成时执行.六:$(jQuery对象)接受一个jQuery对象,返回一个j

Mybatis源码解析,一步一步从浅入深(六):映射代理类的获取

在文章:Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码中我们提到了两个问题: 1,为什么在以前的代码流程中从来没有addMapper,而这里却有getMapper? 2,UserDao明明是我们定义的一个接口类,根本没有定义实现类,那这个userMapper是什么?是mybatis自动为我们生成的实现类吗? 为了更好的解释着两个问题,我们需要重新认识Configuration这个类. 但是在这之前,你需要了解一个概念(设计模式):JAVA设计模式-动态代理(Proxy)示例及说明

mybatis源码-解析配置文件(四)之配置文件Mapper解析

在 mybatis源码-解析配置文件(三)之配置文件Configuration解析 中, 讲解了 Configuration 是如何解析的. 其中, mappers作为configuration节点的一部分配置, 在本文章中, 我们讲解解析mappers节点, 即 xxxMapper.xml 文件的解析. 1 解析入口 在解析 mybatis-config.xml 时, 会进行解析 xxxMapper.xml 的文件. 在图示流程的 XMLConfigBuilder.parse() 函数中, 该

mybatis源码-解析配置文件(四-1)之配置文件Mapper解析(cache)

相关文章推荐 mybatis 缓存的使用, 看这篇就够了 mybatis源码-解析配置文件(四)之配置文件Mapper解析 1. 简介 本文章主要讲解的是, xxxMapper.xml 文件中, cache 节点的源码. 2. 解析 XMLMapperBuilder.cacheElement() 方法主要负责解析 <cache> private void cacheElement(XNode context) throws Exception { if (context != null) {

Mybatis源码解析(四) —— SqlSession是如何实现数据库操作的?

Mybatis源码解析(四) -- SqlSession是如何实现数据库操作的? ??如果拿一次数据库请求操作做比喻,那么前面3篇文章就是在做请求准备,真正执行操作的是本篇文章要讲述的内容.正如标题一样,本篇文章最最核心的要点就是 SqlSession实现数据库操作的源码解析.但按照惯例,我这边依然列出如下的问题: 1. SqlSession 是如何被创建的? 每次的数据库操作都会创建一个新的SqlSession么?(也许有很多同学会说SqlSession是通过 SqlSessionFactor

Mybatis源码解析(一)(2015年06月11日)

一.简介 先看看Mybatis的源码结构图,Mybatis3.2.7版本包含的包共计19个,其他版本可能会少. 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的,SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得,而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例.

MyBatis源码解析之数据源(含数据库连接池简析)

一.概述: 常见的数据源组件都实现了javax.sql.DataSource接口: MyBatis不但要能集成第三方的数据源组件,自身也提供了数据源的实现: 一般情况下,数据源的初始化过程参数较多,比较复杂: 二.设计模式: 为什么要使用工厂模式 数据源模块类图 : 三.MyBatis源码数据源实现 数据结构如下: 使用动态代理封装了真正的数据库连接对象,进行了方法增强:使用前检查连接是否有效,关闭时对连接进行回收: 连接池配置文件配置的数据在这里映射. 用于管理PooledConnection

mybatis源码解析5---StatementHandler解析

StatementHandler解析 接口的作用是statement处理器,位于mybatis包的org.apache.ibatis.executor.statement目录下,源码如下: 1 package org.apache.ibatis.executor.statement; 2 3 import java.sql.Connection; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 import java.