死磕源码:1.mybatis概述
1 概述
mybatis可以说是一个十分成熟的框架了,基本上已经是互联网企业的标配技术之一。mybatis是基于ibatis,其沿用了ibatis的优点,优化了SQL的配置,可以采用ONGI的表达式来动态的配置SQL,可以说mybatis是一个非常优秀的数据库持久层框架。作为一个程序员,十分有必要拜读一下这个框架的源码,了解其核心原理。
2 准备工作
2.1 环境准备
- java8开发环境
- maven下载和安装
- mybatis源码下载,直接git clone https://github.com/mybatis/spring.git即可。
- 开发工具idea
2.2 mybatis的简单应用
2.2.1 配置文件
<?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">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="data-mapper.xml"/>
</mappers>
</configuration>
2.2.2 定义实体类
public class User {
private String id;
private String name;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
2.2.3 编写Mapper文件
public interface UserMapper {
User findById(String id);
}
2.2.4 编写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.simple.demo.UserMapper">
<select id="findById" resultType="com.simple.demo.User">
SELECT * FROM T_USER WHERE ID = #{id}
</select>
</mapper>
2.2.5 使用mybatis
InputStream inputStream = Resources.getResourceAsStream("config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findById("111");
mybatis的核心组件
上边简单的介绍了mybatis最简单的用法,可以说它已经完完全全的将以往的SQL拼接等复杂的操作给屏蔽掉了,可以实现动态的拼接SQL,也不用开发者来管理连接和事务等,十分的方便简介。那么mybatis的核心组成是怎样的呢?
从上图我们可以看到mybatis的核心组件有以下几个
Configuration:用于描述mybatis的配置信息,即我们上边编写的那么mybatis的配置文件,会转换成这样对应的一个配置类。当Mybatis启动的时候,Mapper,TypeHandler等相关信息都会注册到Configuration中,可以通过它来获取相关的信息。
MappedStatement:这个类就是对应的mapper的xml文件中的节点,如select|delete|update等等节点都会转换成对应的MappedStatement对象。
SqlSession:字面意思就是会话,其实它是mybatis提供给用户操作的API接口,用户可以通过SqlSession来进行增删改查等交互操作。
Executor:这个是Mybatis的SQL执行器,SqlSession包装了这个执行器,实际上最终SQL的执行都是通过Executor来进行执行的。
StatementHandler/ParameterHandler:这个是对JDBC的Statement进行了加强。
ResultSetHandler:它能将查询结果转换成Java对象。
TypeHandler:主要是Mybatis的类型处理器,用于做类型映射的。
3 总结
本章结束,大家应当对mybatis有一个整体的理解,要针对以下几个方面有一个认证
- mybatis的使用
- mybatis的整体结构即关键的类的作用