快速上手mybatis

快速上手

  1. 引入mybatis和mysql-connector依赖
  2. 创建mybatis配置文件,配置数据库链接参数,以及mapper文件地址
  3. 配置mapper文件,写入需要执行的sql语句
  4. 创建输入流读取mybatis配置文件
  5. 通过所输入流,使用SqlSessionFactoryBuilder对象的build方法创建SqlSessionFactory对象
  6. 通过SqlSessionFactory对象的openSession方法开启java程序与数据库的一个会话(sqlSession)
  7. 调用sqlSession中的select等方法传入在mapper文件中指定的sqlId来调用该sql
  • 从该例子可以看出,Mybatis所构建的是实体类数据操作接口-实际数据库操作语句的结构模式
  • 实体类中描述了数据库中的属性,通过自动映射机制,映射到对应表的列中
  • 数据操作接口,这里称为mapper接口,定义了类对于数据库的行为(增删改查),其可以看作是实体类对象与数据操作之间的桥梁,用来联系java对象和xml配置文件
  • 实际数据库操作语句通常存放在xml文件中,用之前提到的接口中的方法名来作为id形成:实体类-接口方法-sql语句的对应关系,使得客户端程序员可以使用方法来调用所对应的sql语句,形成所谓的面向对象编程思维。

准备数据模型

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("li",111.11);
INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("zhang",222.22);
INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("wang",333.33);

项目搭建

依赖文件与实体类

<!-- 依赖文件 -->
<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>
//实体类
public class Employee {

    private Integer empId;

    private String empName;

    private Double empSalary;
    
    //getter | setter
}

Mapper接口与MapperXML文件

  • MyBatis框架下SQL语句编写位置发生改变,从原来的Java类改成XML或者是注解定义,推荐使用XML编写SQL语句
  • MyBatis中的Mapper接口相当于Dao层,区别在于Mapper只需要建立接口,不需要提供实现类,具体的SQL写道Mapper文件中
// Mapper接口
package com.atli.mapper;

import com.atli.pojo.Employee;

/**
 * t_emp表对应数据库SQL语句映射接口!
 *    接口只规定方法,参数和返回值!
 *    mapper.xml中编写具体SQL语句!
 */
public interface EmployeeMapper {

    /**
     * 根据员工id查询员工数据方法
     * @param empId  员工id
     * @return 员工实体对象
     */
    Employee selectEmployee(Integer empId);
    
}
  • 在编写时注意方法名与SQL的id一致
  • resultType等配置需要全类名(该配置文件是由流读入的)
  • 方法返回值和resultType一致
  • 方法的参数和SQL的参数一致
  • 接口的全类名和映射配置文件的名称空间一致
<!-- MapperXML文件 -->
<?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.atli.mapper.EmployeeMapper">
    
    <!-- 查询使用 select标签
            id = 方法名
            resultType = 返回值类型
            标签内编写SQL语句
     -->
    <select id="selectEmployee" resultType="com.atli.pojo.Employee">
        <!-- #{empId}代表动态传入的参数,并且进行赋值!后面详细讲解 -->
        select emp_id empId,emp_name empName, emp_salary empSalary from 
           t_emp where emp_id = #{empId}
    </select>
</mapper>

MyBaits配置文件

  • 用于配置数据库连接信息,性能配置,mapper.xml配置等
  • 习惯上命名为mybatis-config.xml,整合Spring后可以不用
<?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="root"/>
      </dataSource>
    </environment>
  </environments>

  <mappers>
    <!-- Mapper注册:指定Mybatis映射文件的具体位置 -->
    <!-- mapper标签:配置一个具体的Mapper映射文件 -->
    <!-- resource属性:指定Mapper映射文件的实际存储位置,这里需要使用一个以类路径根目录为基准的相对路径 -->
    <!--    对Maven工程的目录结构来说,resources目录下的内容会直接放入类路径,所以这里我们可以以resources目录为基准 -->
    <mapper resource="mappers/EmployeeMapper.xml"/>
  </mappers>

</configuration>

运行测试

/**
 * projectName: com.atli.test
 *
 * description: 测试类
 */
public class MyBatisTest {

    @Test
    public void testSelectEmployee() throws IOException {

        //创建SqlSessionFactory对象
        //声明Mybatis全局配置文件的路径
        String mybatisConfigFilePath = "mybatis-config.xml";

        //以输入流的形式加载Mybatis配置文件
        InputStream inputStream = Resources.getResourceAsStream(mybatisConfigFilePath);

        //基于读取Mybatis配置文件的输入流创建SqlSessionFactory对象
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //使用SqlSessionFactory对象开启一个会话
        SqlSession session = sessionFactory.openSession();

        //根据EmployeeMapper接口的Class对象获取Mapper接口类型的对象(动态代理技术)
        EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);

        //调用代理类方法既可以触发对应的SQL语句
        Employee employee = employeeMapper.selectEmployee(1);

        System.out.println("employee = " + employee);

        //关闭SqlSession
        session.commit(); //提交事务 [DQL不需要,其他需要]
        session.close(); //关闭会话

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值