1 简介
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架,其几乎消除了所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。MyBatis 应用程序大都使用 SqlSessionFactory 实例,SqlSessionFactory 实例可以通过 SqlSessionFactoryBuilder 获得,而 SqlSessionFactoryBuilder 则可以从一个 XML 配置文件或者一个预定义的配置类的实例获得。
mybatis框架原理图
架构流程图及其解释
1、 mybatis配置
SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
2 构建步骤
想要熟练的使用 MyBatis 框架,就必须明确其构建步骤,在此,咱们给出构建 MyBatis 框架的详细步骤,以供大家参考:
1、创建一个 Java Web 项目并导入 MyBatis 框架的 jar 包;
2、创建日志记录文件log4j.properties
3、创建核心配置文件 mybatis-config.xml ;
4、创建映射文件 PersonMapper.xml;
5、创建测试类MyBatis_demoTest
其中,MyBatis 框架的 jar 包可以通过“MyBatis 之 各种依赖包 ”进行下载,而且里面包含了大多数常用的配置文件,值得大家get。此外,还有一点需要大家注意,那就是 MyBatis 框架用于操作数据,支持 SQL 语句,因此在体验 MyBatis 框架的时候,需要使用数据库配合进行测试。在本篇博文中,咱们在数据库中创建了一个名为“person”的表,并通过 MyBatis 框架对其进行一系列常见的操作(增、删、改、查等)。
3 体验 MyBatis 框架
首先,给出项目结构图:
项目结构图
第一步:创建 Java Web 项目,并导入 需要的jar 包
再把以下mybatis核心的jar文件,mybatis所依赖的jar文件,mysql数据库驱动jar文件方法classes目录中
目录结构如下:
第二步:创建日志文件 log4j.properties,mybatis默认使用log4j来记录日志信息
先在项目中创建一个保存配置文件的java源文件夹config
接下来在config目录中创建log4j.properties日志配置文件
# mybatis默认使用log4j作为输出日志信息。
log4j.rootLogger=DEBUG, stdout
# Console output
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
第三步:在config目录中创建核心配置文件 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//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"><!--数据源类型,使用mybatis自带的连接池-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/hwua/entity/PersonMapper.xml"/><!--加载映射文件-->
</mappers>
</configuration>
第四步:创建映射文件 PersonMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hwua.entity.PersonMapper"> <!-- 命名空间,名字可以随意起,只要不冲突即可 -->
<!--id:设置调用的方法名,resultType设置返回的数据类型-->
<select id="findAll" resultType="com.hwua.entity.Person">
SELECT * FROM PERSON /*书写sql语句*/
</select>
</mapper>
第五步:创建实体类(Person)
package com.hwua.entity;
/**
* create by 豪哥帅 on 2018.5.10
*/
public class Person {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
第六步:创建测试类(MyBatis_demoTest)
package com.hwua.test;
import com.hwua.entity.Person;
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.util.List;
public class MyBatis_demoTest {
@Test
public void test() throws IOException {
/**
* 1、获得 SqlSessionFactory
* 2、获得 SqlSession
* 3、调用在 mapper 文件中配置的 SQL 语句
*/
String resource = "mybatis-config.xml";
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource));
SqlSession session = sqlSessionFactory.openSession();/*把它看成一个Connection链接对象*/
try {
List<Person> pList = session.selectList("com.hwua.entity.PersonMapper.findAll");
for (Person person : pList) {
System.out.println(person);
}
} finally {
session.close();//关闭session对象
}
}
}
在完成以上步骤后,咱们可以通过 JUnit 来测试框架是否搭建成功,具体使用 JUnit 进行测试的方法,可以通过阅读“基于 JUnit 单元测试的原理及示例”来了解更为详细的内容。