一、依赖配置

添加依赖即可,jar包或pom依赖:

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>x.x.x</version>
</dependency>

二、SqlSessionFactory

2.1 什么是SqlSessionFactory?

SqlSessionFactory是MyBatis的核心类,它是单个数据库映射关系经过编译后的内存镜像。主要功能是提供用于操作数据库的SqlSession。

2.2 构建SqlSessionFactory?

SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。

后者可以从一个xml配置文件(mybatis-config.xml文件)或预定制的Configuration实例中构建出SqlSessionFactory,每一个MyBatis应用都以一个SqlSessionFactory实例为核心,同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在于内存中,应用运行期间不要重复创建多次,建议使用单例模式。

xml配置文件中包含了对mybatis系统的核心设置,包括获取数据库连接实例的数据源DataSource和决定事务作用域和控制方式的事务管理器TransactionManager。一个简单的mybatis-config.xml(未与spring整合)的例子如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><mapper resource="org/mybatis/example/BlogMapper.xml"/></mappers>
</configuration>

上面的配置信息是关键的部分。xml头部声明用来验证xml文档正确性。environment元素体中包含了事务管理和连接池的配置。mappers元素则是包含一组mapper映射器(这些mapper的xml文件包含了SQL代码和映射定义信息)

构建(如果使用像spring这样的框架,或者更高级一点的springboot,这些工作全都不用我们来做了,开箱即用):

SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(inputStream);

三、SqlSession

3.1 什么是SqlSession?

SqlSession是MyBatis的关键对象,是持久化操作的独享,类似于jdbc中的Connection,它是应用程序与持久层之间执行交互操作的一个单线程对象。SqlSession对象包含全部的以数据库为背景的SQL操作方法,底层封装jdbc连接,可以用SqlSession实例来直接执行被映射的SQL语句。但是记住,SqlSession应该是线程私有的,因为它不具备线程安全性。

3.2 SqlSession的获取?

SqlSession的实例需要从SqlSessionFactory中获取。SqlSession涵盖了对数据库执行SQL命令所需的全部方法。

SqlSession session = sqlSessionFactory.openSession();// 通过SqlSessionFactory对象来获取
try {Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {session.close();
}

上面这种代码比较偏旧。现在有一种更直白的方式。使用对于给定语句能够合理描述参数和返回值的接口,现在不但可以执行更清晰的类型安全的代码,而且还不用担心易错的字符串字面量以及强制类型转换。例如:

SqlSession session = sqlSessionFactory.openSession();
try {BlogMapper mapper = session.getMapper(BlogMapper.class);Blog blog = mapper.selectBlog(101);
} finally {session.close();
}

四、探究已映射的SQL语句

一个查询的SQL,基于xml的映射语句的实例如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper"><select id="selectBlog" resultType="Blog">select * from Blog where id = #{id}</select>
</mapper>

在一个xml映射文件中,定义多少个映射语句都是可以的。命名空间“org.mybatis.example.BlogMapper”定义了一个名为“selectBlog”的映射语句,这样它就允许你使用指定的完全限定名“org.mybatis.example.BlogMapper.selectBlog”来调用映射语句。

这种使用全限定名调用映射语句的方式和通过全限定名调用Java对象的方法是相似的,这是因为mybatis通过这种方式可以直接映射到在命名空间中同名的Mapper类(实际上命名空间就是用于定义对应Mapper类的全限定名的),并将已映射的select语句中的名字、参数、返回值类型匹配成方法。这样就可以轻松的调用到位于Mapper接口中对应的同名方法。

使用如下的代码:

BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);

更有优势,首先它不是基于字符串常量的,就会更安全;其次,对于已经映射的SQL语句,对于id = "selectBlog",IDE可以自动为我们补全方法或提示。

五、命名空间

命名空间(namespace)在之前版本的mybatis中是可选的,但是在目前版本的mybatis中是必须的

命名空间使得我们所见的接口绑定成为可能,出于长远考虑,使用命名空间,并将它置于合适的Java包命名空间之下,将拥有一份更加整洁的代码并提高mybatis的可用性。

5.1 命名解析

为了减少输入量,mybatis对所有的命名配置元素(包括语句,结果映射,缓存等)使用如下的命名解析规则。

1.全限定名(如“com.package.Mapper.selectAllThings”),将被直接查找并且找到即用。

2.短名称(如“selectAllThings”),如果全局唯一也可以作为一个单独的引用。如果不唯一,就会在使用时收到错误报告,提示短名称不是唯一的,这种情况下必须使用完全限定名。

六、基于注解的SQL映射

映射器类(Mapper class 实际上是一个仅仅包含一系列定义方法签名和返回值类型的interface)还有另一种不是用xml来映射SQL语句的方法————Java注解,如下所示:

package org.mybatis.example;
public interface BlogMapper {@Select("SELECT * FROM blog WHERE id = #{id}")Blog selectBlog(int id);
}

但是注解中的SQL语句毕竟限制性太强,稍微复杂一点的SQL语句会使得代码非常混乱,因此我们应当合理权衡注解和xml的SQL映射。

MyBatis基础知识概述相关推荐

  1. 实验管理员掌握的计算机知识,计算机应用基础知识概述试验.DOC

    计算机应用基础知识概述试验 第1章 计算机应用基础知识概述实验 实验1.1 键盘指法练习及汉字输入 [实验目的与要求] 熟悉键盘布局及各键的功能. 掌握正确的键盘指法. 学会拼音输入法或五笔字型输入法 ...

  2. Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述

    Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述 前言 2016年,我写了一系列的 VUE 入门教程,当时写这一系列博文的时候,我也只是一个菜鸟 ...

  3. Swift基础知识概述

    第二章: Swift基础知识概述 1. 三件事 学习Swift语言 学习Xcode 理解ios开发组件,API.SwiftUI.SDK等 从以上三个方面自己修练.不用担心. 2. 开始学习 首先看一段 ...

  4. 低功耗蓝牙(BLE)基础知识概述

    1.开篇 低功耗蓝牙的概念以及低功耗蓝牙为什么能做到低功耗,蓝牙基础知识概述经典蓝牙和低功耗蓝牙的区别中就可以看出来了,这里就不多说了.本篇文章主要介绍BLE应用层开发中常见的一些概念以及BLE广播包 ...

  5. 计算机的应用范围归纳起来主要有,计算机应用基础知识概述.doc

    第1章 计算机应用基础知识 1.1 计算机的发展概述 世界上第一台电子计算机于1946年2月在美国宾夕法尼亚大学诞生,取名为ENIAC(读作"埃尼克"),即Electronic N ...

  6. MyBatis从入门到精通(一)—MyBatis基础知识和快速入门

    Mybatis简介 原始jdbc操作(查询数据) Connection connection = null;PreparedStatement preparedStatement = null;Res ...

  7. Quartz.NET基础知识概述

    Quartz.NET是什么 由于我现在使用的Quartz.NET2.2版本,相对2.x变化不大,主要是相对于1.x更新了很多东西,如下基础知识摘录网络. Quartz.NET是一个开源的作业调度框架, ...

  8. MyBatis基础知识汇总

    文章目录 MyBatis简介 简介 MyBatis历史 为什么要用MyBatis? MyBatis入门 安装 从XML中构建SqlSessionFactory 不使用 XML 构建 SqlSessio ...

  9. 组态软件基础知识概述

    要想理解什么是组态软件,先理解什么是组态. 组态,英文名称"Configuration",是用应用软件中提供的工具.方法,完成工程中某一具体任务的过程."组态(Confi ...

最新文章

  1. 手机虚拟摄像头_没键盘也能打字?三星展示最新虚拟键盘Selfie Type:是真的
  2. Win 10 源码一览:0.5T 代码、400 万文件、50 万文件夹
  3. C五:exit()函数作用的程序
  4. C++实用技巧(三)
  5. SpringCloud配置中心高可用搭建
  6. 浙江巨丰管业有限公司网站
  7. 坐标变换过程(vertex transformation)
  8. IOSelect模块
  9. 提交数据网页设计_网站网页编写需要注意哪些问题?
  10. st算法 求区间最值问题
  11. web myeclipse为什么连接不上css_Web技巧 (03)
  12. 转 国内的go get问题的解决
  13. 第D题 把手放在键盘上时,稍不注意就会往右错一位。
  14. php接口返回一个数组怎末写_PHP写api接口怎么写啊,有什么具体的例子吗?
  15. 金万维异速联服务器重装,金万维异速联服务器配置说明.doc
  16. 安卓手机上虚拟linux系统教程,如何在安卓手机上安装Linux系统
  17. vscode c++ code runner 配置 opencv
  18. 强烈推荐一个上网以来见过的最好的学习资料网站,全部免费!
  19. 人参鹿鞭片39.9/花花公子裤子29/除螨仪9.9/三合一数据线8.8/阿迪达斯沐浴露39.9/超多好物你等!...
  20. python网易云_Python数据可视化:网易云音乐歌单

热门文章

  1. Java新特性:数据类型可以扔掉了?
  2. Oracle注册表修改 乱码编码
  3. Linux(CentOS 7)安装docker
  4. C#中利用Linq.Dynamic实现简单的动态表达式构建查询
  5. 友盟小米收不到推送消息_Android 推送集成华为,小米,友盟
  6. 什么意思中文翻译_os常见意思介绍
  7. 台式电脑如何设置开机密码_设置苹果Mac电脑的开机密码-macw资讯
  8. python字典进行大写转化_Python字典转换成小写?
  9. commons-pool2-2.3 jar包_[漏洞复现]FastJson 1.2.61远程代码执行漏洞(From第三方jar包)
  10. clickhouse mysql引擎_ClickHouse为啥能做到变态快,超 MySQL 801倍?