MyBatis
一、MyBatis环境搭建
创建工程
启动idea开发工具,选择工具栏中的“file”--“new”--“project”选项弹出“new project”对话框,编辑项目名称 选择maven项目,项目路径 单击 create 创建即可。

引入相关依赖
<dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.37</version></dependency></dependencies>
<!-- 将项目中src/main/java目录下的XML等资源文件编译进classes文件夹--><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>
创建数据库
create database mybatis
创建数据库连接信息配置文件
在src/mian/resources目录下创建db.properties
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&;characterEncoding=utf8&;useSSL=false
mysql.username=root
mysql.password=123456
创建MyBatis的核心配置文件
在src/mian/resources目录下创建mybatis-config.xml
<?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>
<!-- 环境配置-->
<!-- 加载类路径下的属性文件--><properties resource="db.properties"></properties><environments default="development"><environment id="development"><transactionManager type="JDBC"/>
<!-- 数据库连接相关配置,db.properties文件中的内容--><dataSource type="POOLED"><property name="driver" value="${mysql.driver}" /><property name="url" value="${mysql.url}" /><property name="username" value="${mysql.username}" /><property name="password" value="${mysql.password}" /></dataSource></environment></environments>
</configuration>
至此,MyBatis的开发环境搭建完成了。
二、MyBatis入门程序
数据库准备
USE mybatis;
CREATE TABLE users(
uid int PRIMARY KEY auto_increment,
uname VARCHAR(20) NOT NULL,
uage int not NULL
);INSERT into users(uid,uname,uage) VALUES (null,'张三',20),(null,'李四',18);
创建POJO实体类
在项目中的src/main/java目录下创建com.itheima.pojo包,在com.itheima.pojo包下创建User类,该类用于封装User对象的属性,
package com.itheima.pojo;public class User {private int uid; //用户idprivate String uname; //用户姓名private int uage; //用户年龄public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public int getUage() {return uage;}public void setUage(int uage) {this.uage = uage;}
}
创建映射文件UserMapper.xml
<!--mapper为映射的根节点 namespace指定Dao接口的完整类名mybatis会根据这个接口动态创建一个实现类去实现这个接口,而这个实现类是一个Mapper对象-->
<mapper namespace="com.itheima.pojo.User"><select id="findById" parameterType="int" resultType="com.itheima.pojo.User">select * from users where uid = #{id};</select>
</mapper>
修改mybatis-config.xml配置文件
<!--mapping文件路径配置--><mappers><mapper resource="mapper/UserMapper.xml"></mapper></mappers>
编写测试类
在项目的src/test/java目录下创建Test包,在Test包下创建UserTest类,该类主要用于程序测试:
package test;import com.itheima.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.io.IOException;
import java.io.Reader;public class UserTest {@Testpublic void userFindByIdTest(){String resources = "mybatis-config.xml";//创建流Reader reader = null;try {reader = Resources.getResourceAsReader(resources);} catch (IOException e) {throw new RuntimeException(e);}//初始化MyBatis数据库,创建SqlSessionFactory类的实例SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);//创建SqlSession实例SqlSession session = sqlMapper.openSession();//传入参数查询,返回结果User user = session.selectOne("findById", 2);//输出结果System.out.println(user.getUname());//关闭sqlSessionsession.close();}
}
三、MyBatis工作流程

上面中流程就是MyBatis内部核心流程,每一步流程的详细说明如下文所述:
(1)读取MyBatis的配置文件。mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接信息。
(2)加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。
(3)构造会话工厂。通过MyBatis的环境配置信息构建会话工厂SqlSessionFactory。
(4)创建会话对象。由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。
(5)Executor执行器。MyBatis底层定义了一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。
(6)MappedStatement对象。在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。
(7)输入参数映射。输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数的过程。
(8)输出结果映射。输出结果类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输出结果映射过程类似于JDBC对结果集的解析过程。