MyBatis基本流程

MyBatis基本流程

基本使用步骤

  1. 准备数据

    CREATE DATABASE `mybatis-example`;
    ​
    USE `mybatis-example`;
    ​
    CREATE TABLE `t_emp`(
      emp_id INT AUTO_INCREMENT,
      emp_name CHAR(100),
      emp_salary DOUBLE(10,5),
      PRIMARY KEY(emp_id)
    );
    ​
    INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("tom",200.33);
    INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("jerry",666.66);
    INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("andy",777.77);

     

  2. 导入依赖

    <dependencies>
      <!-- mybatis依赖 -->
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.5.11</version>
      </dependency>
    ​
      <!-- MySQL驱动 mybatis底层依赖jdbc驱动实现,本次不需要导入连接池,mybatis自带! -->
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.25</version>
      </dependency>
    ​
      <!--junit5测试-->
      <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-api</artifactId>
          <version>5.3.1</version>
      </dependency>
    </dependencies>
  3. 准备实体类

    public class Employee {
        private Integer empId;
    ​
        private String empName;
    ​
        private Double empSalary;
    ​
        public Integer getEmpId() {
            return empId;
        }
    ​
        public void setEmpId(Integer empId) {
            this.empId = empId;
        }
    ​
        public String getEmpName() {
            return empName;
        }
    ​
        public void setEmpName(String empName) {
            this.empName = empName;
        }
    ​
        public Double getEmpSalary() {
            return empSalary;
        }
    ​
        public void setEmpSalary(Double empSalary) {
            this.empSalary = empSalary;
        }
    ​
        @Override
        public String toString() {
            return "Employee{" +
                    "empId=" + empId +
                    ", empName='" + empName + '\'' +
                    ", empSalary=" + empSalary +
                    '}';
        }
    }
  4. 准备mapper接口和 接口的xml配置文件

    package com.ztone.mapper;
    ​
    import com.ztone.pojo.Employee;
    ​
    public interface EmployeeMapper {
        Employee queryById();
    }

    在xml文件中,有mybatis固定的格式

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!-- namespace等于mapper接口类的全限定名,这样实现对应 -->
    <mapper namespace="com.ztone.mapper.EmployeeMapper">
    ​
        <!-- 查询使用 select标签
                id = 方法名
                resultType = 返回值类型
                标签内编写SQL语句
         -->
        <select id="queryById" resultType="com.ztone.pojo.Employee">
            select emp_id empId,emp_name empName, emp_salary empSalary from
            t_emp where emp_id = #{empId}
        </select>
    </mapper>

    其中所有的sql语句都写在 mapper标签中,namespace 就是对应的接口的全限定符

    在<mapper 标签中就可以写查询修改删除插入标签,其中 id就是接口中的方法名,resultType是方法返回值类型

  5. 准备mybais配置文件

    该配置文件的作用是:数据库连接信息,性能配置,mapper.xml 配置等

    习惯命名为: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表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 -->
        <environments default="development">
            <!-- environment表示配置Mybatis的一个具体的环境 -->
            <environment id="development">
                <!-- Mybatis的内置的事务管理器 -->
                <transactionManager type="JDBC"/>
                <!-- 配置数据源 -->
                <dataSource type="POOLED">
                    <!-- 建立数据库连接的具体信息 -->
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis-example"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
    ​
        <mappers>
            <!-- Mapper注册:指定Mybatis映射文件的具体位置 -->
            <!-- mapper标签:配置一个具体的Mapper映射文件 -->
            <!-- resource属性:指定Mapper映射文件的实际存储位置,这里需要使用一个以类路径根目录为基准的相对路径 -->
            <!--    对Maven工程的目录结构来说,resources目录下的内容会直接放入类路径,所以这里我们可以以resources目录为基准 -->
            <mapper resource="mapper/EmployeeMapper.xml"/>
        </mappers>
    ​
    </configuration>

    在configration 标签中配置信息

    • environments 可以配置多套 environment

    • environment主要用来配置事务管理器和数据源等

    • mappers 用来配置 多个mapper

    • mapper 用来注册接口对应的xml配置文件

  6. 运行和测试

    在进行数据库操作之前还有几个步骤,这几个步骤是使用mybatis必须要做的,在使用了spring后就可以省略

    • 创建SqlSessionFactory对象

      • 声明mybatis配置文件的路径

      • 以输入流的方式加载配置文件

      • 基于配置文件,创建SqlSessionFactory对象

    • 使用SqlSessionFactory对象开启一个会话

    • 根据业务接口的Class对象获取mapper接口类型的对象

    • 调用代理类方法触发对应的sql语句

    • 提交事务

    • 关闭SqlSession

    import com.ztone.mapper.EmployeeMapper;
    import com.ztone.pojo.Employee;
    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.jupiter.api.Test;
    ​
    import java.io.IOException;
    import java.io.InputStream;
    ​
    /**
     * projectName: com.atguigu.test
     *
     * description: 测试类
     */
    public class MyBatisTest {
    ​
        @Test
        public void testSelectEmployee() throws IOException {
    ​
            // 1.创建SqlSessionFactory对象
            // ①声明Mybatis全局配置文件的路径
            String mybatisConfigFilePath = "mybatis-config.xml";
    ​
            // ②以输入流的形式加载Mybatis配置文件
            InputStream inputStream = Resources.getResourceAsStream(mybatisConfigFilePath);
    ​
            // ③基于读取Mybatis配置文件的输入流创建SqlSessionFactory对象
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    ​
            // 2.使用SqlSessionFactory对象开启一个会话
            SqlSession session = sessionFactory.openSession();
    ​
            // 3.根据EmployeeMapper接口的Class对象获取Mapper接口类型的对象(动态代理技术)
            EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
    ​
            // 4. 调用代理类方法既可以触发对应的SQL语句
            Employee employee = employeeMapper.queryById(1);
    ​
            System.out.println("employee = " + employee);
    ​
            // 4.关闭SqlSession
            session.commit(); //提交事务 [DQL不需要,其他需要]
            session.close(); //关闭会话
    ​
        }
    }
posted @ 2024-08-13 17:49  GrowthRoad  阅读(5)  评论(0编辑  收藏  举报