【框架篇】MyBatis 介绍及使用(详细教程)

本文介绍了MyBatis这一优秀的持久层框架,它能简化数据库操作,提高开发效率。文中阐述了其用途,详细说明了使用步骤,包括数据库和表创建、开发环境配置、开发流程等,还介绍了查询数据库的流程及框架交互原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,MyBatis 介绍

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

简单来说,MyBatis是一个开源的持久层框架,它提供了一种简单且强大的方式来与关系型数据库进行交互。MyBatis通过使用XML或注解来定义数据库操作,并通过原生的SQL查询语句与数据库进行交互。

总之,MyBatis是一个轻量级、易于学习且功能强大的持久层框架,适用于各种规模的Java应用程序。它通过简化数据库访问的过程,提高了开发效率和代码的可维护性。MyBatis官网地址


二,MyBatis 用途

对于后端开发来说。程序是由后端程序和数据库这两个重要的部分组成的,而这两个重要的组成部分要通讯,需要依靠数据库连接工具。

而数据库连接工具有哪些呢? 常用来作为数据库连接工具的有JDBC,但是 JDBC 的操作步骤比较繁琐。

JDBC 的操作步骤主要分为以下几步:

  1. 创建一个数据源对象
  2. 设置数据源对象的属性
  3. 通过数据源对象获取数据库连接对象
  4. 构造SQL执行语句
  5. 通过连接对象创建预编译的SQL语句执行对象
  6. 执行SQL语句,并获取结果集
  7. 释放结果集,预编译的SQL语句执行对象和数据库连接对象

使用 JDBC 进行数据库表查询操作具体实现代码:

//导入java.sql包中的相关类
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

//导入javax.sql包中的相关类
import javax.sql.DataSource;

//导入com.mysql.cj.jdbc包中的MysqlDataSource类
import com.mysql.cj.jdbc.MysqlDataSource;


public class JDBCSelectDemo {
    public static void main(String[] args) throws SQLException {
        //创建一个数据源对象
        DataSource dataSource = new MysqlDataSource();

        //设置数据源对象的属性
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/itcast?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //通过数据源对象获取数据库连接对象
        Connection connection = dataSource.getConnection();

        //准备SQL查询语句
        String sql = "select * from student";

        //通过连接对象创建预编译的SQL语句执行对象
        PreparedStatement statement = connection.prepareStatement(sql);

        //执行SQL查询,并获取查询结果集
        ResultSet resultSet = statement.executeQuery();

        //遍历查询结果集,输出每一条记录的id和name字段值
        while(resultSet.next()){
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = " + id + ", name = " + name);
        }

        //关闭查询结果集、预编译的SQL语句执行对象和数据库连接对象
        resultSet.close();
        statement.close();
        connection.close();
    }
}

从上述代码和操作流程可以看出,对于 JDBC作为数据库连接工具来说,整个操作流程是非常的繁琐,我们不但要拼接每一个参数,而且还要按照模板代码的方式,一步步的操作数据库,并且在每次操作完数据库后,还要进行手动关闭连接等,最主要的还是所有的这些操作步骤都需要在每个方法中重复书写,导致代码冗余和增加了代码的工作量。

那有没有一种方法,可以更简单、更方便的操作数据库呢?

当然是有的,使用MyBatis就可以很好地解决上述的问题,它可以帮助我们更方便,更快速的操作数据库。


三,MyBatis 使用

MyBatis 的使用分为两部分,分别为:MyBatis开发环境的配置使用MyBatis模式和语法操作数据库

1,数据库和数据表的创建

1.1,数据库和数据表创建
-- 创建数据库
drop database if exists itcast;
create database itcast DEFAULT CHARACTER SET utf8mb4;

-- 使用数据数据
use itcast;

-- 创建表[用户表]
drop table if exists  userinfo;
create table userinfo(
    id int primary key auto_increment,
    username varchar(100) not null,
    password varchar(32) not null,
    photo varchar(500) default '',
    createtime timestamp default current_timestamp,
    updatetime timestamp default current_timestamp,
    `state` int default 1
) default charset 'utf8mb4';

-- 添加一个用户信息
INSERT INTO `itcast`.`userinfo` (`id`, `username`, `password`, `photo`, `createtime`, `updatetime`, `state`) VALUES 
(1, 'admin', 'admin', '', '2021-12-06 17:10:48', '2021-12-06 17:10:48', 1);

2,MyBatis开发环境的配置

2.1,添加MyBatis框架支持

添加MyBatis框架支持分为两种情况,一种情况是对自己之前的 Spring 项目进行升级,另一种情况是创建一个全新的 MyBatis 和 Spring Boot的项目,下面分别来演示这两种情况的具体实现。

新项目添加MyBatis框架支持流程:

1,创建Spring Boot 项目,注意标记的两个属性选项。

image-20230721151543523

2,选择项目版本为2.7.14,并勾选MyBatis FrameworkMySQL Driver 这两个框架支持。

image-20230721161208469

老项目添加MyBatis框架支持流程:

1,在老项目的pom.xml文件中添加MyBatis框架依赖,框架依赖为:

<!-- 添加 MyBatis 框架 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>
<!-- 添加 MySQL 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
    <scope>runtime</scope>
</dependency>

2,添加依赖后,重新加载项目

image-20230721214136225


2.2,设置MyBatis配置信息

1)设置数据库连接的相关信息

在配置文件 application.yml 中设置数据库连接的相关信息,配置如下:

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: '123456'
    driver-class-name: com.mysql.cj.jdbc.Driver

注意说明:如果使用的mysql-connector-java是 5.x 版本之前,driver-class-name的参数值应设置为com.mysql.jdbc.Driver,如果版本大于5.x,driver-class-name的参数值应设置为com.mysql.cj.jdbc.Driver

2)设置MyBatis xml保存路径

设置MyBatis xml保存路径,xml 文件中保存是对数据库的具体操作SQL,配置如下:

mybatis:
  mapper-locations: classpath:mybatis/*Mapper.xml

3)启动MyBatis项目

在设置好MyBatis配置信息后,运行启动MyBatis项目,观察能否成功运行,如果项目成功运行,说明配置成功。

image-20230721152940324


3,MyBatis开发流程

3.1,根据xml保存路径创建包

image-20230721153834406


3.2,添加实体类对象

在 Java 目录下创建一个实体类包用来存放各种实体类,其中就包含UserEntity实体类。

image-20230726204440993

添加UserEntity 实体类代码:

package com.example.mybatis.entity;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class UserEntity {
    private int id;
    private String username;
    private String password;
    private String photo;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
}

3.3,添加 mapper 接口

数据库持久层UserMapper接口定义代码:

package com.example.mybatis.mapper;
import com.example.mybatis.entity.UserEntity;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
    List<UserEntity> getAll();
}

注意说明:创建好UserMapper类后立即在类上添加@Mapper注解,该注解源自org.apache.ibatis.annotations.Mapper

image-20230721154217129


3.4,添加 mybatis xml 文件

为了数据库持久层的实现,需要添加对应的MyBatis框架的XML映射文件,MyBatis的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="">

</mapper>

为了更好地理解上述内容,举个例子:UserMapper.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.example.mybatis.mapper.UserMapper">
    <select id="getAll" resultType="com.example.mybatis.entity.UserEntity">
        select * from userinfo
    </select>
</mapper>

实现代码说明:

image-20230726210833363

  • namespace属性用于指定映射器接口的完全限定名,它是与此映射器文件相关联的映射器接口的唯一标识,形式为全包名.类名

  • id属性指定了语句的唯一标识符,与接口中定义的方法名称⼀样的,表示对接口的具体实现方法。

  • resultType属性指定了查询结果的类型。在这个例子中,查询结果的类型是com.example.mybatis.entity.UserEntity

综上所述,这个示例的目的是定义了一个名为getAll的查询语句,它将查询数据库中的userinfo表,并将结果映射为com.example.mybatis.entity.UserEntity类型的对象。

通过这个映射文件,可以让MyBatis框架自动生成相应的SQL查询代码,方便在 Java 程序中调用和使用。


3.5,添加 Service 服务层

添加 Service 服务层,示例具体实现代码如下:

package com.example.mybatis.service;
import com.example.mybatis.entity.UserEntity;
import com.example.mybatis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    public List<UserEntity> getAll(){
        return userMapper.getAll();
    }
}

实现代码说明:在Service类(服务层)中注入Mapper接口(持久层),并在Service类中调用Mapper接口中的具体方法。


3.6,添加 Controller 控制层

添加 Controller 控制层,示例具体实现代码如下:

package com.example.mybatis.controller;
import com.example.mybatis.entity.UserEntity;
import com.example.mybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping("/getAll")
    public List<UserEntity> getAll(){
        return userService.getAll();
    }
}

实现代码说明:在Controller类(控制层)中注入Service(服务层),并在Controller类中调用Service类中的具体方法。


4,MyBatis查询数据库测试

4.1,项目运行启动

image-20230726212718042


4.2,数据库记录信息


4.3,浏览器地址栏输入

image-20230726213149043


4.4,Postman工具检测

image-20230726213712781


四,MyBatis 流程

1,MyBatis 查询数据库流程

MyBatis 在进行查询数据库操作的执行流程主要为:

  1. 配置数据源:在MyBatis中,首先需要在配置文件中配置数据源,以便连接到数据库。通常是可以通过使用连接池或者直接配置数据库连接信息连接。
  2. 创建映射文件:MyBatis使用XML文件来定义数据库操作语句和映射关系。创建一个映射文件,它包含了数据库查询、插入、更新和删除等操作的语句,以及将结果映射到 Java对象的规则。
  3. 创建映射接口:为每个映射文件创建一个对应的 Java接口,接口中定义了与映射文件中相同的操作方法。
  4. 配置映射关系:在MyBatis的配置文件中,将映射文件和映射接口进行关联,指定它们的路径和命名空间。
  5. 注入Mapper接口:在需要使用查询功能的类中,通过依赖注入(比如@Autowired)方式注入Mapper接口的实例。
    • Controller 类中注入Service 类对象,Service类中注入 Mapper 接口。
  6. 调用Mapper接口进行查询:通过注入的Mapper接口实例调用定义的查询方法,将参数传递给方法并执行查询操作。
    • Controller 类(控制层)中调用 Service类(服务层),而Service类(服务层)中调用Mapper类接口(持久层)。
  7. 处理查询结果:根据查询的需求和Mapper接口方法的返回类型,对查询结果进行处理。可以返回单个对象、列表、映射结果等。
    • 查询结果从Mapper持久层中返回至Service,再从Service服务层中返回至Controller,最后再从Controller控制层返回至前端。

2,MyBatis 框架交互流程图

MyBatis 在整个框架中的定位,框架交互流程图:

注意说明:MyBatis 是一个ORM框架,ORM (Object Relational Mapping),即对象关系映射。在面向对象编程语言中,将关系型数据库中的数据与对象建立起映射关系,进而自动的完成数据与对象的互相转换。

对象关系映射主要完成两步操作,分别为将输入数据(传入对象)+ SQL 映射成原生SQL以及将结果集映射为返回对象(输出对象)。


结语

这就是本期博客的全部内容啦!如果有什么其他的问题无法自己解决,可以在评论区留言哦!

最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞👍,评论✍,收藏📖),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!

在这里插入图片描述


### .NET Framework 3.5 安装问题 Windows 11 解决方案 #### 使用Windows功能启用.NET Framework 3.5 对于在Windows 11上遇到的.NET Framework 3.5安装难题,一种常见的解决办法是利用系统的“启用或关闭Windows功能”。进入设置中的应用程序部分找到此选项,在这里可以发现“.NET Framework 3.5 (包含.NET 2.0 和 3.0)”条目。尝试勾选并应用更改来启动内置支持[^2]。 如果上述方式未能解决问题,则可能是因为缺少必要的在线源文件或是网络连接不稳定造成的失败情况。此时建议采用离线模式来进行部署。 #### 利用DISM命令进行离线安装 当常规途径受阻时,可以通过命令提示符执行特定指令完成任务。具体来说就是运用`DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:D:\sources\sxs`这样的语句(假设D盘为含有Windows安装介质的位置),这会强制系统从指定路径获取所需数据而非互联网,从而绕过潜在障碍。 另外值得注意的是,有专门针对此类情形准备好的资源库可供借鉴学习,里面不仅详尽记录了解析过程还附带了实际案例分享以及对应措施说明[^3]。 #### 手动下载离线安装包 考虑到某些特殊环境下的需求,比如企业内部网或者缺乏稳定外联网路接入的地方,提前准备好独立版本显得尤为重要。可以从微软官方网站或者其他可信站点取得最新版次的独立安装程序,并按照官方文档指示逐步实施直至结束整个流程[^1]。 ```powershell # PowerShell脚本用于自动化离线安装过程 $sourcePath = "D:\sources\sxs" dism.exe /online /enable-feature /featurename:NetFX3 /all /limitaccess /source:$sourcePath ``` 为了确保最佳实践效果,请务必确认所使用的镜像文件是最新的服务包级别;同时注意检查目标计算机的操作系统位数与之匹配以免发生兼容性冲突等问题。
评论 70
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨MiManchi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值