MyBatis-基本使用

MyBatis 作为持久层框架,其主要思想是将程序中的大量 SQL 语句剥离出来,配置在配置文件中,以实现 SQL 的灵活配置。这样做的好处是将 SQL 与程序代码分离,做到可以在不修改程序代码的情况下,直接在配置文件中修改 SQL。

使用 MyBatis 进行持久化操作,通常有如下操作步骤:

  1. 开发实体类 POJO 和编写持久化操作的 Mapper.xml,在 Mapper.xml 中定义要执行的 SQL 语句;
  2. 获取 SqlSessionFactory;
  3. 获取 SqlSession;
  4. 用面向对象的方式操作数据库;
  5. 关闭事务,关闭 SqlSession;

下面是使用 MyBatis 时需要先加载配置文件:

1
2
3
InputStream is=Resources.getResrourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(is);
SqlSession session=sessionFactory.openSession();

MyBatis 的初始化要经过以下几个步骤:

  1. 调用 SqlSessionFactoryBuilder 对象的 build(inputStream) 方法;
  2. SqlSessionFactoryBuilder 会根据输入流 inputStream 等信息创建 XMLConfigBuilder 对象;
  3. SqlSessionFactoryBuilder 调用 XMLConfigBuilder 对象的 parse() 方法;
  4. XMLConfigBuilder 对象解析 XML 配置文件返回 Configuration 对象;
  5. SqlSessionFactoryBuilder 根据 Configuration 对象创建一个 DefaultSessionFactory 对象;
  6. SqlSessionFactoryBuilder 返回 DefaultSessionFactory 对象给客户端,供客户端使用。

创建 SqlSessionFactory 以及 获取 SqlSessin

1
2
3
4
5
6
//读取 mybatis-config.xml 文件为输入流
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//初始化 mybatis,创建 SqlSessionFactory 类的实例
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建 SqlSession 实例
SqlSession sqlSession=sqlSessionFactory.openSession();

通过 XML 编写对应的 SQL 语句

1
2
3
4
5
6
7
8
9
10
11
<?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="包名.UserMapper">

<insert id="save" parameterType="org.fkit.domain.User" userGeneratedKeys="true">
INSERT INTO TB_USER(name,sex,age) VALUES(#{name},#{sex},#{age})
</insert>

</mapper>

通过 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
2
3
4
public interface PersonMapper
{
Person selectPersonById(Integer id);
}