目录

1.什么是Mybatis

2.mybatis的优势

3.环境搭建

创建工程

引入相关依赖

数据库准备

编写数据库连接信息配置文件

编写核心配置文件和映射文件

数据的准备

创建POJO实体

创建映射文件UserMapper.xml

4.工作原理


1.什么是Mybatis

        MyBatis 是一个开源的 Java 持久层框架,它是 Apache 软件基金会旗下的一个子项目。MyBatis 的主要目标是简化数据库访问层的开发,提供了一种将 SQL 语句和 Java 方法进行映射的方式,使得开发者可以通过 XML 或者注解的方式配置 SQL 映射关系,从而在 Java 代码中直接调用相应的方法执行 SQL 操作,而无需编写繁琐的 JDBC 代码。MyBatis 还提供了许多高级功能,如动态 SQL、结果映射、缓存机制等,使得开发者可以更加灵活和高效地操作数据库。MyBatis 被广泛应用于 Java 开发领域,特别是在企业级应用和中小型项目中。

        Mybatis框架是一个ORM(对象关系映射)框架,用于将对象模型和关系型数据库之间的数据进行映射。ORM 框架就是用来实现 ORM 技术的软件框架,它们简化了开发者对数据库的操作,通过将数据库表和行映射到面向对象的模型,使得开发者可以使用面向对象的方式来操作数据库,而不必编写繁琐的 SQL 查询和数据库访问代码。

0cf003a453a8430bbe2001d962441cd1.gif

2.mybatis的优势

  • 简化 SQL 编写: MyBatis 通过 XML 配置或注解方式,将 SQL 语句与 Java 方法进行映射,避免了在 Java 代码中编写大量的 SQL 语句,使得代码更加清晰和易于维护。
  • 灵活性: MyBatis 允许开发者直接编写 SQL 语句,从而具有更高的灵活性。开发者可以根据实际需求编写复杂的 SQL 查询,并且可以充分利用数据库的特性。
  • 参数映射: MyBatis 支持将 Java 对象直接作为参数传递给 SQL 语句,无需手动设置参数类型和值,简化了参数处理过程。

  • 结果集映射: MyBatis 支持将数据库查询结果映射为 Java 对象,使得开发者可以直接操作 Java 对象而无需手动解析结果集,提高了代码的可读性和可维护性。

  • 缓存机制: MyBatis 提供了一级缓存和二级缓存机制,可以缓存查询结果,减少数据库访问次数,提高系统性能。

  • 事务管理: MyBatis 提供了事务管理功能,可以通过配置文件或者注解来管理事务,简化了事务处理的过程。

  • 异常处理: MyBatis 封装了 JDBC 的异常处理,提供了更友好和更具可读性的异常信息,便于开发者排查问题。

  • 整合性: MyBatis 能够与 Spring、Spring Boot 等常用的 Java 开发框架深度整合,使得在实际项目中的应用更为便捷。

MyBatis 相较于 JDBC 具有更高的抽象程度、更强的灵活性和可扩展性,能够简化开发过程,提高代码的可读性和可维护性,并且在性能优化和缓存管理方面也有一定的优势。

3.环境搭建

  • 创建工程

9412547ccdf54cf5a5b639a8ae6a6cb5.png

b517f00fa5084877942da84b28bd6f47.png

项目目录结构

0a3cf02c620f4999822436bce9b8946f.png

  • 引入相关依赖

    • 由于项目要连接数据库以及对程序进行测试,所以想要在pom.xml文件中导入MySQL驱动包,Jnuit测试包,mybatis的核心包等相关依赖
<?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>org.example</groupId>
    <artifactId>Mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>


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

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <!-- <scope>test</scope>-->
            <scope>compile</scope>
        </dependency>
    </dependencies>

</project>

db6bd38aaaa043e289294239e724e501.png

IDEA默认集成Maven,第一次引入依赖时候,需要在联网状态下进行,且引入依赖需要较长时间,耐心等待依赖完成即可。

           创建一个名为mybatis的数据库

create database mybatis;

        在项目src/main/resources目录下创建数据库连接的配置文件,命名为db.properties,在该文件中配置数据库连接的参数。

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8
mysql.username=root
mysql.password=123456

前缀.键=值,driver表示mysql的驱动,url表示mysql子协议(localhost表示本地3306,mybatis为创建的库名,servertimezone表示时区,characterencoding表示编码方式)

970c675a2f2e465c8abacc58dd34718c.png

  • 编写核心配置文件和映射文件

        在项目的src/main/resources目录下创建核心配置文件,用于项目的环境配置,如数据库连接相关配置等,通常命名为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>
    <!-- 环境配置 -->
    <!-- 加载类路径下的属性文件 -->
    <properties resource="db.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!-- 数据库连接相关配置 ,db.properties文件中的内容-->
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>
<!---->
    
</configuration>

62860fe4ad8241b0bd3224a180994907.png

  • 数据的准备

在mybatis数据库创建users表,插入两条记录。

use mybatis;
create table user(
    uid int primary key auto_increment,
    uname varchar(20) not null,
    uage int not null
);
insert into users(uid,uname,uage) values(1,'张三',20),(2,'李四',18);
  • 创建POJO实体

        在项目的src/main/java目录下创建org.example.pojo包,在org.example.pojo包下创建User类,该类用于封装User对象的属性

package org.example.pojo;

public class User {
    private int uid;  //用户id
    private String uname;   //用户姓名
    private int uage;   //用户年龄

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public int getUage() {
        return uage;
    }

    public void setUage(int uage) {
        this.uage = uage;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", uage=" + uage +
                '}';
    }

}
  • 创建映射文件UserMapper.xml

        在src/main/resources目录下创建一个文件夹mapper用于放置映射文件UserMapper.xml,实现SQL语句和Java对象之间的映射,将查询到的关系数据封装成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为映射的根节点-->
<!-- mapper为映射的根节点,namespace指定Dao接口的完整类名
mybatis会依据这个接口动态创建一个实现类去实现这个接口,
而这个实现类是一个Mapper对象-->
<mapper namespace="org.example.pojo.User">
    <!--select:查询statement(声明)
    id ="接口中的方法名,语句的唯一标识"
  parameterType="传入的参数类型,可省略"
  resultType = "配置返回的结果集类型,返回实体类对象,使用包.类名"-->
    <select id="findById" parameterType="int"
            resultType="org.example.pojo.User">
         select * from users where uid = #{id}
    </select>
</mapper>
  • 修改mybatis-config.xml配置文件

        在配置文件中添加UserMapper.xml映射文件路径的配置,用于将映射文件加载到程序中。

<!--设置配置映射文件的位置-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>


<!--添加到configiguration标签里面,environment标签下面-->
  • 编写测试类

        在src/test/java目录下创建test包,包下创建UserTest类,用于程序测试。

package Test;

import org.example.pojo.User;
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.IOException;
import java.io.Reader;

public class UserTest {
    @Test
    public void FindById() {
        //读取文件名
        String resources = "mybatis-config.xml";
        //创建流
        Reader reader = null;
        try {
            //读取mybatis-config.xml文件内容到reader对象中
            reader = Resources.getResourceAsReader(resources);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //初始化mybatis数据库,创建SqlSessionFactory类的实例
        SqlSessionFactory sqlMapper = new
                SqlSessionFactoryBuilder().build(reader);
        //创建SqlSession对象
        SqlSession session = sqlMapper.openSession();
        //传入参数查询,返回结果
        User user = session.selectOne("org.example.pojo.User.findById", 1);
        //输出结果
        System.out.println(user.getUname());
        //关闭session
        session.close();
    }
}

运行结果显示

4.工作原理

  1. 加载配置: MyBatis 通过读取配置文件(通常是 mybatis-config.xml)来获取配置信息,包括数据库连接信息、映射文件路径、插件等。这个过程一般由 SqlSessionFactoryBuilder 来完成。

  2. 创建 SqlSessionFactory: 基于加载的配置信息,MyBatis 构建 SqlSessionFactory 对象。SqlSessionFactory 是一个线程安全的对象,用于创建 SqlSession

  3. 创建 SqlSession: 当应用程序需要与数据库进行交互时,它会请求 SqlSessionFactory 创建一个新的 SqlSessionSqlSession 提供了对数据库操作的各种方法,包括执行 SQL、获取 Mapper 等。

  4. 执行 SQL: 应用程序通过 SqlSession 执行 SQL 语句。这些 SQL 语句可以是直接在代码中写的、在 XML 文件中定义的,或者是通过注解指定的。SqlSession 会将 SQL 语句发送到数据库并返回结果。

  5. 映射处理: MyBatis 将查询结果映射为 Java 对象。这个过程可以通过配置文件中的映射规则、注解或者接口中的方法来定义。MyBatis 将查询结果按照映射规则转换成 Java 对象,并返回给应用程序。

  6. 事务管理: 如果配置了事务管理器,MyBatis 将会在 SqlSession 的操作中处理事务。事务管理可以是基于 JDBC 的、基于 Spring 的声明式事务管理,或者是自定义的事务管理器。

  7. 关闭资源: 在完成数据库操作后,应用程序需要关闭 SqlSession。关闭 SqlSession 会释放数据库连接和其他资源。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐