一、MyBatis简介
1.1 MyBatis是什么
- MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进
- MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码
- 对jdbc的封装框架有:Hibernate , dbutils , jdbcTemplate(spring自带), mybatis 等
- 原理:Mybatis通过 xml 或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回
1.2 原生 JDBC 编程
- 前言:
我们引入新的机制,技术等的原因往往是由于旧有的技术有一些缺陷如冗余,低性能,复杂等弊端。
为了提高我们编写代码的效率,项目的性能等,我们常常会对这些缺陷进行改进或者提出一种新的技术代替旧有的技术。
MyBatis 就是的产生就与远程 JDBC 的缺陷紧密相关 - JDBC 编程步骤
- 加载数据库驱动
- 创建并获取数据库链接
- 获取预处理 statement 对象
- 定义 sql 语句
- 设置sql语句中的参数
- 向数据库发出 sql 执行查询,查询出结果集
- 分析处理结果集
- 释放资源
- JDBC 编程缺陷
- 数据库连接频繁开启和关闭,会严重影响数据库的性能
- 代码中存在硬编码,分别是数据库部分的硬编码和SQL执行部分的硬编码
1.3 MyBatis的框架核心
- mybatis 配置文件,包括 Mybatis全局配置文件和 Mybatis 映射文件,其中全局配置文件配置了数据源、事务等信息;映射文件配置了SQL执行相关的 信息
- mybatis 通过读取配置文件信息(全局配置文件和映射文件),构造出 SqlSessionFactory,即会话工厂
- 通过 SqlSessionFactory,可以创建 SqlSession 即会话。Mybatis是通过 SqlSession 来操作数据库的
- SqlSession 本身不能直接操作数据库,它是通过底层的 Executor 执行器接口来操作数据库的。Executor 接口有两个实现类,一个是普通执行器,一个是缓存执行器(默认)
- Executor 执行器要处理的SQL信息是封装到一个底层对象 MappedStatement 中。该对象包括:SQL语句、输入参数映射信息、输出结果集映射信息。其中输入参数和输出结果的映射类型包括 HashMap 集合对象、POJO 对象类型
- 调用关参考图
二、MyBatis入门案例
2.1 准备工作
- 数据库中任意创建一张表用于测试
- 下载 MyBatis 框架:https://github.com/mybatis/mybatis-3/releases (不断在更新中)
- 准备需要导入 MyBatis 框架( 其实就是 jar包 ),数据库驱动包等
- 新建项目,在根目录下创建 lib 文件夹,并将 MyBatis 框架和其他包放入到根目录下新建的 lib 文件夹中
- 添加 log4j.properties 实现日志功能
2.2 测试步骤
- 依据前文测试用例数据表,创建一个 PO 类(实体类)
- 在根目录下,创建全局配置文件 SqlMapConfig.xml,配置数据库用户名,密码等信息
- 在根目录下,创建sqlmap文件夹,配置映射文件
- 返回全局配置文件 SqlMapConfig.xml ,并在其中加载映射文件
- 最后,编写测试类
三、思路整理
3.1 使用框架前提
- 需要导入使用 MyBatis 框架时需要的包
- 需要配置:全局配置文件,映射配置文件,再在全局配置文件中加载映射配置文件
- 之后,就可以使用框架
3.2 使用框架步骤
- 读取配置文件
- 通过读取配置文件,构造出 SqlSessionFactory(会话工厂)
- 通过 SqlSessionFactory(会话工厂)创建 SqlSession(会话)
- 最终通过 SqlSession(会话)来操作映射配置文件中的方法
- 示例图
- 注意:此处可以使用面向切面思想,将第 4 步之前的部分抽取为 @before ,第 4 步之后的抽取为 @after 。因为这两部分都是会重复执行的部分, 只有第 4 步会根据调用的映射配置文件中的不同的数据库操作而变化。如图所示: