MyBatis 简单使用

本文将介绍如何在项目中使用 MyBatis 。

一、导入依赖

1. Maven 项目

在 pom.xml 中添加依赖:

1
2
3
4
5
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>

2. 其它项目

(1) 下载 JAR 包

JAR 包及源码下载地址:https://github.com/mybatis/mybatis-3/releases

(2) 添加依赖

在 IDEA 中依次打开 file - Project Structure - Modules - Dependencies,单击 + ,选择 JARs or directories,选中下载下来的 mybatis-X.X.X.jar 即可。

二、构建 SqlSessionFactory

1. 说明

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

  • MyBatis 以 SqlSessionFactory 的实例为核心

  • SqlSessionFactory 实例的构建需要配置

  • 可以使用 XML 文件进行配置

  • 使用 XML 文件进行配置有诸多好处

    • 配置与代码分离
    • 利于维护
    • 利于扩展

2. 配置

(1) 使用 XML

具体请看:

MyBatis 配置文件

src\main\resources 下新建 mybatis-config.xml,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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="数据库驱动类名"/>
<property name="url" value="url"/>
<property name="username" value="用户名"/>
<property name="password" value="密码"/>
</dataSource>
</environment>
</environments>
</configuration>

(2) 不使用 XML

不建议

3. 构建 SqlSessionFactory

src\main\java 下新建 utils 包,新建 MyBatisUtils 类,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
public class MyBatisUtils {
static {
try {
// 获取 SqlSessionFactory 对象
String resource = "mybatis-config.xml";
InputStream resourceInputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceInputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
}

三、获取 SqlSession

在构建了 SqlSessionFactory 之后,便可以通过它获取 SqlSession 实例。

MyBatisUtils 类中新增类方法:

1
2
3
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}

调用 MyBatisUtils 类的类方法,获取 SqlSession 实例后,便可以执行”已映射”的 SQL 语句。

四、执行 SQL

1. JDBC 的做法

(1) 定义接口

新建 XxxDao 接口,定义抽象方法。

在 dao 文件夹中新建 UserDao 接口,定义抽象方法:

1
2
3
public interface UserDao {
public List<User> getUserList();
}

(2) 定义接口实现类

定义 XxxDaoImpl 接口实现类,实现抽象方法。

在 dao 文件夹中新建 UserDaoImpl 类,实现接口:

1
2
3
4
5
public class UserDaoImpl implements UserDao {
public List<User> getUserList() {
···JDBC代码···
}
}

(3) 执行 SQL

实例化接口实现类,赋值给接口变量,调用方法。

1
2
UserDao userDao = new UserDaoImpl();
List<User> users = userDao.getUserList();

2. Mybatis 的做法

(1) 定义接口

新建 XxxMapper 接口,定义抽象方法。

在 dao 文件夹中新建 UserMapper 接口,定义抽象方法。

1
2
3
public interface UserMapper {
public List<User> getUserList();
}

(2) 定义 SQL 映射

需要建立接口中抽象方法与 SQL 语句的映射关系,可以通过 XML 或注解来定义

(3) 执行 SQL(全限定名法)

通过 全限定接口名.抽象方法名 可以定位到已映射至接口上抽象方法的 SQL 语句。

调用 sqlSession 的实例方法,传入 全限定接口名.抽象方法名 和 SQL 语句所需的参数,执行 SQL 。

1
sqlSession.实例方法("全限定接口名.抽象方法名", 参数)

示例:

1
sqlSession.selectOne("org.example.UserMapper.getUserList");

(2) 执行 SQL(接口绑定法)

更好的方法

  • 调用 sqlSession 的 getMapper() 实例方法,传入接口的 class 对象,获得 mapper 实例

    这里的 mapper 实例可以简单看作接口实现类的实例

  • 将 mapper 实例赋值给类型为接口的变量

  • 调用方法

1
2
3
4
5
// 获取 mapper 实例
XxxMapper xxxMapper = sqlSession.getMapper(XxxMapper.class);

// 调用方法,执行 SQL
xxxMapper.方法();
1
2
3
4
5
// 获取 mapper 实例
UserMapper mapper = sqlSession.getMapper(UserMapper.class);

// 调用方法,执行 SQL
List<User> userList = mapper.getUserList();

3. SQL 映射的作用

通过映射,将 SQL 语句数据操作方法 相绑定,相比于接口实现类,较少了大量冗余的代码。

4. XML 定义 SQL 映射

具体请看:

用 XxxMapper.xml 替代复杂繁琐的接口实现类 XxxMapperImpl 。

创建 XxxMapper.xml,代码如下:

1
2
3
4
5
6
7
8
9
10
<?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="接口全类名">
<子标签名 id="方法名">
SQL 语句
</子标签名>
</mapper>

5. 注解定义 SQL 映射

可以通过注解来完成语句映射,例如:

1
2
3
4
public interface UserDao {
@Select("select * from user")
public List<User> getUserList();
}

仅适用于简单的 SQL 语句。

参考