MyBatis 作为持久层框架,其主要思想是将程序中的大量 SQL 语句剥离出来,配置在配置文件中,以实现 SQL 的灵活配置。这样做的好处是将 SQL 与程序代码分离,做到可以在不修改程序代码的情况下,直接在配置文件中修改 SQL。
使用 MyBatis 进行持久化操作,通常有如下操作步骤:
- 开发实体类 POJO 和编写持久化操作的 Mapper.xml,在 Mapper.xml 中定义要执行的 SQL 语句;
- 获取 SqlSessionFactory;
- 获取 SqlSession;
- 用面向对象的方式操作数据库;
- 关闭事务,关闭 SqlSession;
下面是使用 MyBatis 时需要先加载配置文件:
1 | InputStream is=Resources.getResrourceAsStream("mybatis-config.xml"); |
MyBatis 的初始化要经过以下几个步骤:
- 调用 SqlSessionFactoryBuilder 对象的 build(inputStream) 方法;
- SqlSessionFactoryBuilder 会根据输入流 inputStream 等信息创建 XMLConfigBuilder 对象;
- SqlSessionFactoryBuilder 调用 XMLConfigBuilder 对象的 parse() 方法;
- XMLConfigBuilder 对象解析 XML 配置文件返回 Configuration 对象;
- SqlSessionFactoryBuilder 根据 Configuration 对象创建一个 DefaultSessionFactory 对象;
- SqlSessionFactoryBuilder 返回 DefaultSessionFactory 对象给客户端,供客户端使用。
创建 SqlSessionFactory 以及 获取 SqlSessin
1 | //读取 mybatis-config.xml 文件为输入流 |
通过 XML 编写对应的 SQL 语句
1 | <?xml version="1.0" encoding="UTF-8" ?> |
通过 mapper 接口操作数据库
MyBatis 官方手册建议通过 mapper 接口的代理对象访问 MyBatis,该对象关联了 SqlSession 对象,开发者可以通过该对象直接调用方法操作数据库。
Mapper 接口对象的类名必须和之前的 XML 文件中的 mapper 的 namespace 一致,而且方法名和参数也必须和 XML 文件中的 SQL 语句的 id 属性和 parameterType 属性一致。1
2
3
4
5
6
7
8
9<?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">
<mapper namespace="包名.PersonMapper">
<select id="selectPersonById" parameterType="int" ...>
</mapper>
1 | public interface PersonMapper |