学习官网
https://mybatis.org/mybatis-3/zh/index.html

一、概述

1.1 什么是mybatis?作用?

MyBatis是一个持久层框架 ORM —对象关系映射(数据库表的列和实体类的成员变量一一对应)
image.png
作用
具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

二、使用mybatis

  • 加入依赖
  • 编写mapper.xml,写sql语句,并定义好sql的输入参数,和输出参数
  • 编写全局配置文件,配置数据源,以及要加载的mapper.xml文件
  • 通过全局配置文件,创建SqlSessionFactory
  • 每次进行CRUD时,通过SqlSessionFactory创建一个SqlSession
  • 调用SqlSession上的selectOne,selectList,insert,delete,update等方法,传入mapper.xml中SQL标签的id,以及输入参数

image.png

2.1 引入依赖

  1. <!--mybatis依赖-->
  2. <dependency>
  3. <groupId>org.mybatis</groupId>
  4. <artifactId>mybatis</artifactId>
  5. <version>3.4.6</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>mysql</groupId>
  9. <artifactId>mysql-connector-java</artifactId>
  10. <version>5.1.47</version>
  11. </dependency>

2.2 创建pojo类

package com.mis.basic.pojo;
/**
 * @author:刘倩云
 * @createTime:2021-03-08
 */
public class Student {
    private Long stuId;
    private String stuName;
    private String loginPass;
    private Integer stuGender;
    private Integer stuAge;
    private String stuBirth;
    private String stuTel;
    private String stuEducation;
    private Integer status;
    private Long classId;
    //省略get,set,构造函数
}

2.3 mapper映射文件(编写SQL)

映射文件一般和接口放在一起
<!-- StudentMapper.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="com.mis.basic.IStudentDao">
    <select id="queryAll" resultType="com.mis.basic.pojo;">
        SELECT * FROM student;
    </select>
    <insert id="insert" parameterType="com.mis.basic.pojo;">
        INSERT INTO student (name,age,gender) VALUES (#{name},#{age},#{gender});
    </insert>
</mapper>

2.4 数据源properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.183.129:3306/mis?characterEncoding=utf8
user=root
password=root

2.5 全局配置文件(主要是配置数据源信息)

<?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>
    <!-- 配置文件信息 -->
    <properties resource="properties/db.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 从配置文件中加载属性 -->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 加载前面编写的SQL语句的文件 -->
        <mapper resource="StudentMapper.xml"/>
    </mappers>
</configuration>

2.6 编写DAO

public class StudentDaoImpl ... {
    public StudentDao(String configName) throws IOException {
        InputStream inputStream = Resources.getResourceAsStream(configName);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }
    //添加
    public int save(Student student) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        int result = sqlSession.insert("insert", student);
        sqlSession.commit();
        sqlSession.close();
        return result;
    }
    //查找所有
    public List<Student> findAll() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<Student> students = sqlSession.selectList("queryAll");
        sqlSession.close();
        return students;
    }

}

注:可以写Mybatis获取sqlSession对象的工具类

/**
 * @author:刘倩云
 * @createTime:2021-03-20
 * 获取sqlSession
 */
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            //获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream in = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //获取sqlSession对象
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

测试:

@Test
public void test01() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    //方式一:
    TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
    Teacher teacher = mapper.queryById(1L);
    System.out.println(teacher);
}