MyBatis入门:第一个MyBatis示例(详细步骤和完整源码)

2,867 阅读3分钟

完整源码地址:gitee.com/exciter/myb…

1 创建数据库

可以直接用可视化数据库管理工具创建,如Navicat等。

#创建员工表
CREATE TABLE table_employee(
	id INT PRIMARY KEY AUTO_INCREMENT,
	last_name VARCHAR(255),
	gender CHAR(1),
	email VARCHAR(255)
);
#插入数据
INSERT INTO table_employee(last_name,gender,email) 
VALUES('井川里予','女','123@qq.com'),
('一条小团团','女','456@qq.com'),
('安妮','女','789@qq.com');

2 创建Java Maven项目并引入依赖

2.1 IDEA创建新的Maven项目

创建路径:File->Project->Maven-Next。

2.2 引入依赖

pom.xml中引入所需依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>site.exciter</groupId>
    <artifactId>MyBatis_HelloWorld</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--添加MyBatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>
    </dependencies>

</project>

3 创建数据实体

新建包model,在model包下创建Employee.java类:

package site.exciter.mybatis.model;

public class Employee {
    private int id;
    private String lastName;
    private String gender;
    private String email;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", lastName='" + lastName + ''' +
                ", gender='" + gender + ''' +
                ", email='" + email + ''' +
                '}';
    }
}

4 创建接口类

开发中绝大部分项目会使用接口式编程,所以先定义一个接口类,在接口类中定义接口方法去操作数据库。

新建包dao,在dao下创建EmployeeMapper.java,并定一个根据id查数据的方法:

package site.exciter.mybatis.dao;

import org.apache.ibatis.annotations.Mapper;
import site.exciter.mybatis.model.Employee;

@Mapper
public interface EmployeeMapper {
    Employee getElementById(int id);
}

5 创建映射文件

sql映射文件中保存了每一个sql语句的映射信息,这就实现了将sql语句从MyBatis中剥离出来自己去实现的需求,方便开发者去优化控制sql语句。

MyBatis会将前边定义的Mapper接口类与xml映射文件绑定,然后生成代理,去实现对数据库的增删改查操作。

Resources下新建mapper文件夹,然后创建employee-mapper.xml

<?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="site.exciter.mybatis.dao.EmployeeMapper">
    <!--
    namespace:名称空间,指定为接口的全类名
    id:唯一标识
    resultType:返回值类型
    #{id}:从传递过来的参数中取出id值

    Employee getEmpById(int id);
     -->
    <select id="getElementById" resultType="site.exciter.mybatis.model.Employee">
        select id, last_name as lastName, gender, email
        from table_employee
        where id = #{id}
    </select>
</mapper>

6 创建全局配置文件

全局配置文件主要进行数据库以及映射文件的配置。

Resources下新建config文件夹,然后创建mybatis-config.xml

<?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">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--数据库地址-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <!--数据库账号-->
                <property name="username" value="root"/>
                <!--数据库密码-->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--映射文件路径-->
        <mapper resource="mapper/employee-mapper.xml"/>
    </mappers>
</configuration>

7 通过MyBatis查询数据库

创建QueryDataTest类,使用junit的@Test来写测试方法。

package site.exciter.mybatis;

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 site.exciter.mybatis.dao.EmployeeMapper;
import site.exciter.mybatis.model.Employee;

import java.io.IOException;
import java.io.InputStream;

public class QueryDataTest {

    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        //注意此处路径不要写错
        String resource = "config/mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }

    /**
     * 1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象
     * 2、sql映射文件;配置了每一个sql,以及sql的封装规则等。
     * 3、将sql映射文件注册在全局配置文件中
     * 4、写代码:
     * 1)、根据全局配置文件得到SqlSessionFactory;
     * 2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
     * 一个sqlSession就是代表和数据库的一次会话,用完关闭
     * 3)、使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。
     *
     * @throws IOException
     */
    @Test
    public void test() throws IOException {
        //1、获取SqlSessionFactory实例
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        //2、打开一个会话
        SqlSession openSession = sqlSessionFactory.openSession();
        try {
            // 3、获取接口的实现类对象,会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
            Employee employee = mapper.getElementById(1);
            System.out.println(employee);
        } finally {
            //4、使用完毕后关闭会话
            openSession.close();
        }
    }
}

查看结果: