MyBatis 框架入门理论与实践

news2025/3/1 9:23:30

文章目录

  • 1. MyBatis 框架介绍
    • 1.1 MyBatis优点
    • 1.2 MyBatis 不足
  • 2. MyBatis 框架整体架构
  • 3. MyBatis 的 ORM 介绍
  • 4. MyBatis 框架入门开发
    • 4.1 入门案例的搭建
      • 4.1.1 准备SQL数据
      • 4.1.2 新建 SpringBoot 项目
      • 4.1.3 ==pom文件:==
      • 4.1.4 配置文件
      • 4.1.5 ==mapper 和 mapper.xml==
      • 4.1.6 构建Controller
    • 4.2 测试
  • 5. 总结



在这里插入图片描述


1. MyBatis 框架介绍


MyBatis 是 Apache软件基金会下的一个开源项目,前身是 iBatis 框架。

2010年这个项目由apache 软件基金会迁移到google code下,改名为 MyBatis 。2013年11月又迁移到了github(GitHub 是一个面向开源及私有 软件项目的托管平台)。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射(多表)。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。它对 jdbc 的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建 connection、创建 statement、手动设置参数、结果集检索等 jdbc 繁杂的过程代码。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。


1.1 MyBatis优点

  1. 简单易学:MyBatis 本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个SQL映射文件即可。
  2. 使用灵活:MyBatis 不会对应用程序或者数据库的现有设计强加任何影响。SQL语句写在XML里,便于统一管理和优化。
  3. 解除SQL与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易进行单元测试。SQL语句和代码的分离,提高了可维护性。

1.2 MyBatis 不足

  1. 编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。
  2. SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
  3. 框架还是比较简陋,功能尚有缺失。

2. MyBatis 框架整体架构

在这里插入图片描述

1、配置文件
全局配置文件(核心配置文件):mybatis-config.xml,作用:配置数据源(配置数据库连接信息),引入映射文件
映射文件:XxMapper.xml,作用:配置sql语句、参数、结果集封装类型等

2、SqlSessionFactory
作用:获取SqlSession
通过 new SqlSessionFactoryBuilder().build(inputStream)来构建,inputStream:读取配置文件的IO流

3、SqlSession
作用:执行CRUD操作

4、Executor
执行器,SqlSession通过调用它来完成具体的CRUD

5、Mapped Statement
在映射文件里面配置,包含3部分内容:
具体的sql,sql执行所需的参数类型,sql执行结果的封装类型
参数类型和结果集封装类型包括3种:
HashMap,基本数据类型,pojo


3. MyBatis 的 ORM 介绍


Object Relational Mapping 对象关系映射:是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。如今已有很多免费和付费的ORM产品,而有些程序员更倾向于创建自己的ORM工具。

MyBatis的两种映射方式:
1. 通过XML映射
2. 通过注解


4. MyBatis 框架入门开发

4.1 入门案例的搭建

4.1.1 准备SQL数据

create table user (
  id int primary key auto_increment,
  username varchar(20) not null,
  birthday date,
  sex char(1) default '男',
  address varchar(50)
);

insert into user values (null, '刘亦菲','1988-10-24','女','湖北武汉');
insert into user values (null, '胡歌','1988-11-12','男','上海');
insert into user values (null, '李现','1991-10-30','男','湖北武汉');
insert into user values (null, '宋祖儿','1999-03-22','女','北京');

4.1.2 新建 SpringBoot 项目

结构如下:
在这里插入图片描述

4.1.3 pom文件:

<?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>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.6.RELEASE</version>
    </parent>

    <groupId>com.snow</groupId>
    <artifactId>studyMybatis</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.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

</project>

4.1.4 配置文件

在resource下面的application.yml文件里写配置:

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.0.108:3306/study_mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver


# mybatis 配置
mybatis:
  # 配置实体类所在的包
  type-aliases-package: com.snow.po
  # 配置 xml 文件所在的包
  mapper-locations: classpath:com/snow/mapper/*.xml
  configuration:
    # 开启驼峰命名
    map-underscore-to-camel-case: true

logging:
  level:
    com.snow.mapper: debug

实体类

import java.io.Serializable;
import java.time.LocalDate;

public class User implements Serializable {

    //  id int primary key auto_increment,
    private Integer id;

    //  username varchar(20) not null,
    private String username;

    //  birthday date,
    private LocalDate birthday;

    //  sex char(1) default '男',
    private String sex;

    //  address varchar(50)
    private String address;

    public User() {
    }

    public User(Integer id, String username, LocalDate birthday, String sex, String address) {
        this.id = id;
        this.username = username;
        this.birthday = birthday;
        this.sex = sex;
        this.address = address;
    }
	 //SET GET 略
}


4.1.5 mapper 和 mapper.xml

在这里插入图片描述
mapper类

import com.snow.po.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface UserMapper {
    List<User> getList();
}

mapper.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.snow.mapper.UserMapper">
    <select id="getList" resultType="User">
        select * from user ORDER BY id DESC
    </select>
</mapper>

4.1.6 构建Controller

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserMapper userMapper;
    
	@GetMapping("/getList")
    public List<User> getList(){
        return userMapper.getList();
    }
}

4.2 测试

完成如上编写后 启动项目 进行测试
输入 http://localhost:8080/user/getList

如下即是获取到了表里的数据
在这里插入图片描述

一个简单的入门案例就完成了 ,是不是比 JDBC 方便了许多呢。


5. 总结

MyBatis是一个流行的Java持久化框架,用于简化与关系数据库的交互。以下是我对MyBatis入门的总结:

  1. 引入依赖:首先,在项目中引入MyBatis的相关依赖。可以使用Maven或Gradle等构建工具进行配置。

  2. 配置数据源:在MyBatis的配置文件中,配置与数据库的连接信息,包括数据库的URL、用户名和密码等。

  3. 定义映射文件:MyBatis使用映射文件将Java对象与数据库表进行映射。在映射文件中,定义SQL语句和参数的映射关系。

  4. 编写实体类:创建与数据库表对应的实体类,并使用注解或XML配置与字段的映射关系。

  5. 编写DAO接口:定义持久化操作的接口,接口中声明需要执行的数据库操作。

  6. 配置DAO映射:在MyBatis的配置文件中,配置DAO接口的映射关系,将接口与映射文件进行绑定。

  7. 获取SqlSession:通过SqlSessionFactory获取SqlSession对象,SqlSession是MyBatis的核心类,用于执行SQL语句。

  8. 执行数据库操作:通过SqlSession对象调用DAO接口中的方法,执行数据库操作,如插入、查询、更新和删除等。

  9. 释放资源:在操作完成后,关闭SqlSession。

MyBatis通过简单的配置和编写少量代码,使得Java程序与数据库的交互变得容易和灵活。入门MyBatis需要理解上述基本步骤,学习并掌握MyBatis的核心概念和使用方式。希望这个总结对你有帮助!



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/998267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言经典100例题(51-54)--学习使用按位与 ,按位或 |,按位异或 ^和按位取反~

目录 题目 问题分析 按位与操作符&#xff08;&&#xff09; 按位或操作符&#xff08;|&#xff09; 按位异或操作符&#xff08;^&#xff09; 按位取反操作符&#xff08;~&#xff09; 代码及运行结果 题目 学习使用按位与& ,按位或 |,按位异或 ^和按位取反…

Android 10.0 禁用插入耳机时弹出的保护听力对话框

1.前言 在10.0的系统开发中,在某些产品中会对耳机音量调节过高限制,在调高到最大音量的70%的时候,会弹出音量过高弹出警告,所以产品 开发的需要要求去掉这个音量弹窗警告功能 2.禁用插入耳机时弹出的保护听力对话框的核心类 frameworks\base\packages\SystemUI\src\com\an…

宋浩高等数学笔记(十二)无穷级数

完结&#xff0c;宋浩笔记系列的最后一更~ 之后会出一些武忠祥老师的错题&笔记总结&#xff0c;10月份就要赶紧做真题了

windows在gem下安装jekyll的问题

项目场景&#xff1a; 安装jekyll时抛出错误&#xff1a; ERROR: While executing gem … (Gem::RemoteFetcher::FetchError) IO::TimeoutError: Failed to open TCP connection to gems.ruby-china.com:443 (https://gems.ruby-china.com/quick/Marshal.4.8/jekyll-0.1.6.ge…

excl在建模语言中的运用

目录 1.表格的定位 2.数学函数 3.自动填充功能 4.数据透视表的应用 5.切片器 6. Date(),time(),now()&#xff0c;today() 7.文本转日期 8.分裂 9.sumif函数 10.数字转换为文本的方法 11.SUMIFS()函数&#xff1a;多个条件筛选 12.宏 13.提取多个表中&#xff0c;…

【随想】每日两题Day.4

题目&#xff1a;LeetCode 203.移除列表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2…

项目部署之持续集成

1. 什么是持续集成 持续集成&#xff08;Continuous integration&#xff0c; 简称CI&#xff09;指的是&#xff0c;频繁地&#xff08;一天多次&#xff09;将代码集成到主干。 持续集成的组成要素 一个自动构建过程&#xff0c; 从检出代码、 编译构建、 运行测试、 结果记…

TDesign 点击高亮显示=》点击切换class类名

1. wx:for遍历数组 2. 在一行显示 2. 点击高亮

NPM 常用命令(七)

目录 1、npm help 1.1 命令使用 1.2 描述 1.3 配置 viewer 2、npm help-search 2.1 命令使用 2.2 描述 2.3 配置 long 3、npm hook 3.1 命令使用 3.2 描述 3.3 示例 3.4 配置 registry otp 4、npm init 4.1 命令使用 4.2 转发附加选项 4.3 示例 4.4 工作…

基于51单片机DS18B20温度及电流检测-proteus仿真-源程序

一、系统方案 本设计采用52单片机作为主控器&#xff0c;液晶1602显示&#xff0c;DS18B20检测温度&#xff0c;电流检测。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 void lcd_init() //lcd 初始化设置子函数&#xff0c;不带参数 ,0x…

Matlab图像处理-边缘提取

基本概念 如果一个像素落在图像中某一个物体的边界上&#xff0c;那么它的邻域将成为一个灰度级变化的带。对这种变化最有用的两个特征是灰度的变化率和方向&#xff0c;它们分别以梯度向量的幅度和方向来表示。 边缘检测算子检查每一个像素的邻域并对灰度变化率进行量化&…

100天精通Python(可视化篇)——第100天:Pyecharts绘制多种炫酷漏斗图参数说明+代码实战

文章目录 专栏导读一、漏斗图介绍1. 说明2. 应用场景 二、漏斗图类说明1. 导包2. add函数 三、漏斗图实战1. 基础漏斗图2. 标签内漏斗图3. 百分比漏斗图4. 向上排序漏斗图5. 标准漏斗图 专栏导读 &#x1f525;&#x1f525;本文已收录于《100天精通Python从入门到就业》&…

特殊矩阵的压缩存储(对称矩阵,三角矩阵和三对角矩阵)

目录 1.对阵矩阵 2.三角矩阵 3.三对角矩阵&#xff08;带状矩阵&#xff09; 均假设数组的下标从0开始 1.对阵矩阵 定义&#xff1a;若对一个n阶矩阵A中的任意一个元素 aᵢ,ⱼ 都有aᵢ,ⱼaⱼ,ᵢ &#xff08;1≤i,j≤n&#xff09;&#xff0c;则称其为对称矩阵。 存储策略…

Spring最佳实践: 构建高效可维护的Java应用程序

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

第7章_瑞萨MCU零基础入门系列教程之UART

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

编译国产openEuler 22.03 LTS系统OpenSSH 9.4的rpm安装包

目前OpenSSH版本已至9.4&#xff0c;其作为操作系统底层管理平台软件&#xff0c;需要保持更新以免遭受安全攻击&#xff0c;编译生成rpm包是生产环境中批量升级的最佳途径。本文在国产openEuler 22.03 LTS系统上完成OpenSSH 9.4的编译工作。 一、准备编译环境&#xff1a; 1…

【北大核心CSCD期刊】生物特征识别论文投稿经历

计算机工程与应用&#xff1a;半月刊、审稿快、比较简单。

iisfastchi漏洞复现

1.查看版本 2.在路径中写入 php脚本 发现使用不了 3.环境搭建 结局打开 把限制打开

PostgreSQL数据库事务系统——获取virtual transaction id

如果一个事务没有进行INSERT、UPDATE、DELETE操作&#xff0c;那么就步会分配事务ID&#xff0c;但事务仍然用一个虚拟事务ID代表自己。虚拟事务ID由两部分组成&#xff0c;第一部分是Backend ID&#xff0c;另一个是每个会话自己维护的本地事务ID计数器。通过两部分组合&#…

算法通关村第十九关——动态规划高频问题(白银)

算法通关村第十九关——动态规划高频问题&#xff08;白银&#xff09; 前言1 最少硬币数2 最长连续递增子序列3 最长递增子序列4 完全平方数5 跳跃游戏6 解码方法7 不同路径 II 前言 摘自&#xff1a;代码随想录 动态规划五部曲&#xff1a; 确定dp数组&#xff08;dp tabl…