一、框架概述
- MyBatis是一个优秀的基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。
- MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果已Java对象返回。
- 采用了ORM的思想。
二、MyBatis的入门程序
1. 创建数据库和表结构
sql
-- 创建数据库
CREATE DATABASE mybatis_db;
-- 使用数据库
USE mybatis_db;
-- 创建用户表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime DEFAULT NULL COMMENT '生日',
`sex` char(1) DEFAULT NULL COMMENT '性别',
`address` varchar(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插入测试数据
INSERT INTO `user`(`id`,`username`,`birthday`,`sex`,`address`)
VALUES
(1,'老王','2018-02-27 17:47:08','男','北京'),
(2,'熊大','2018-03-02 15:09:37','女','上海'),
(3,'熊二','2018-03-04 11:34:34','女','深圳'),
(4,'光头强','2018-03-04 12:04:06','男','广州');
2.MyBatis的入门步骤
2.1 创建 Maven 项目
创建一个普通的 Maven Java 工程即可。
2.2 引入项目依赖
在 pom.xml 文件中添加 MyBatis、MySQL 驱动、Junit 和 Log4j 的依赖。
sql
<dependencies>
<!-- MyBatis 核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- MySQL 驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
2.3 编写实体类 User
java
package com.qcby.domain;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private static final long serialVersionUID = 525400707336671154L;
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
// ... 省略所有 getter 和 setter 方法 ...
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
2.4 编写 UserMapper 接口和方法
java
package com.qcby.mapper;
import com.qcby.domain.User;
import java.util.List;
public interface UserMapper {
/**
* 查询所有的用户
* @return 用户列表
*/
List<User> findAll();
}
2.5 编写 Mapper 配置文件
在 resources 目录下创建 mappers 文件夹,并在其中创建 UserMapper.xml 映射文件。
java
<?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.qcby.mapper.UserMapper">
<!--
id: 接口中方法的名称
resultType: 方法返回值类型(全限定类名)
-->
<select id="findAll" resultType="com.qcby.domain.User">
select * from user;
</select>
</mapper>
2.6 编写 MyBatis 主配置文件
在 resources 目录下创建 SqlMapConfig.xml(名称可自定义),配置数据库连接信息和加载映射文件。
java
<?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="mysql">
<!-- 配置具体环境 -->
<environment id="mysql">
<!-- 配置事务管理类型,JDBC 或 MANAGED -->
<transactionManager type="JDBC"/>
<!-- 配置数据源,POOLED(连接池)/ UNPOOLED(无连接池) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis_db"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射配置文件 -->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
2.7 编写测试类
创建 UserTest 测试类,编写 JUnit 测试方法。
java
package com.qcby.test;
import com.qcby.domain.User;
import com.qcby.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.InputStream;
import java.util.List;
public class UserTest {
/**
* 通过 Mapper 代理对象执行 SQL(推荐)
*/
@Test
public void testFindAll() throws Exception {
// 1. 加载主配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2. 创建 SqlSessionFactory 对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 3. 获取 SqlSession 对象
SqlSession session = factory.openSession();
// 4. 获取 Mapper 接口的代理对象
UserMapper mapper = session.getMapper(UserMapper.class);
// 5. 执行查询方法
List<User> list = mapper.findAll();
// 6. 遍历结果
for (User user : list) {
System.out.println(user);
}
// 7. 释放资源
session.close();
in.close();
}
}