介绍MyBatis

什么是MyBatis

MyBatis是一个Java持久化框架

它通过XML描述符或注解把对象与存储过程或SQL语句关联起来。

特点:与其他的ORM框架不同,MyBatis并没有将Java对象与数据库关联起来,而是将Java方法与SQL语句关联。

MyBatis允许用户充分利用数据库的各种功能,例如储存过程、视图、各种复杂的查询以及某数据库专有特性。

MyBatis支持声明式数据缓存。当一条SQL语句被标记为“可缓存”后,首次执行它时从数据库获取的所有数据会被存储在一段高速缓存中,今后执行这条语句时就会从高速缓存中读取结果,而不是再次命中数据库。

用法

SQL语句存储在XML文件或Java注解中

如:

1
2
3
4
5
6
7
8
9
package org.mybatis.example

public interface BlogMapper{

@Select("select * from Blog where id = #{id}")

Blog selectBlog(int id);

}

执行的示例:

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

SQL语句和映射也可以外化到一个XML文件中:

1
2
3
4
5
6
7
8
<?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="org.mybatis.example.BlogMapper">
<select id="selectBlog" parameterType="int" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>

执行也可以使用MyBatis API 执行语句:

1
Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);

MyBatis Generator

MyBatis Generator是一个可以用来生成MyBatis dao,entity,mapper文件的一个工具。

JPA与MyBatis

JPA是一套规范,它的出现是为了结束Hibernate、TopLink、JDO等ORM框架的各自为营的局面。主流的ORM框架都实现了JPA标准。

MyBatis没有实现JPA。可以说,MyBatis是SQL Mapping框架。
MyBatis和ORM都是持久化框架。

MyBatis主要构件及其相互关系

从MyBatis代码实现的角度来看,MyBatis的主要的核心部件有以下几个:

  • SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
  • Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
  • StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
  • ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所需要的参数,
  • ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
  • TypeHandler 负责java数据类型和jdbc数据类型之间的映射和转换
  • MappedStatement MappedStatement维护了一条<select|update|delete|insert>节点的封装
  • SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
  • BoundSql 表示动态生成的SQL语句以及相应的参数信息
  • Configuration MyBatis所有的配置信息都维持在Configuration对象之中。

image.png

收集自