MyBatis 框架入门理论与实践

文章目录

  • 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: rootpassword: rooturl: jdbc:mysql://192.168.0.108:3306/study_mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.cj.jdbc.Driver# mybatis 配置
mybatis:# 配置实体类所在的包type-aliases-package: com.snow.po# 配置 xml 文件所在的包mapper-locations: classpath:com/snow/mapper/*.xmlconfiguration:# 开启驼峰命名map-underscore-to-camel-case: truelogging: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 mapperPUBLIC "-//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 {@Autowiredprivate 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.mzph.cn/news/74880.shtml

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

相关文章

mysql修改密码

1.mysql5.7以后和8.0版本的修改方法 摘要&#xff1a;经常会遇到mysql忘记密码&#xff0c;以及在公司中&#xff0c;交接没有完成导致无法进入数据库&#xff0c;下面提供了mysql的修改密码方法和使用图形化工具连接数据库的方法以及不需要密码直接进入数据库。 启动mysqld进…

电商类面试问题--01Elasticsearch与Mysql数据同步问题

在实现基于关键字的搜索时&#xff0c;首先需要确保MySQL数据库和ES库中的数据是同步的。为了解决这个问题&#xff0c;可以考虑两层方案。 全量同步&#xff1a;全量同步是在服务初始化阶段将MySQL中的数据与ES库中的数据进行全量同步。可以在服务启动时&#xff0c;对ES库进…

华为OD机考算法题:简单的自动曝光

题目部分 题目简单的自动曝光难度易题目说明一个图像有 n 个像素点&#xff0c;存储在一个长度为n的数组img里&#xff0c;每个像素点的取值范围 [0&#xff0c;255] 的正整数。 请你给图像每个像素点值加上一个整数k&#xff08;可以是负数&#xff09;&#xff0c;得到新图n…

二分搜索树层序遍历(Java 实例代码)

目录 二分搜索树层序遍历 Java 实例代码 src/runoob/binary/LevelTraverse.java 文件代码&#xff1a; 二分搜索树层序遍历 二分搜索树的层序遍历&#xff0c;即逐层进行遍历&#xff0c;即将每层的节点存在队列当中&#xff0c;然后进行出队&#xff08;取出节点&#xff0…

注意力机制讲解与代码解析

一、SEBlock(通道注意力机制) 先在H*W维度进行压缩&#xff0c;全局平均池化将每个通道平均为一个值。 &#xff08;B, C, H, W&#xff09;---- (B, C, 1, 1) 利用各channel维度的相关性计算权重 (B, C, 1, 1) --- (B, C//K, 1, 1) --- (B, C, 1, 1) --- sigmoid 与原特征相…

Jmeter进阶使用指南-使用参数化

Apache JMeter是一个广泛使用的开源负载和性能测试工具。在进行性能测试时&#xff0c;我们经常需要模拟不同的用户行为和数据&#xff0c;这时候&#xff0c;参数化就显得尤为重要。此文主要介绍如何在JMeter中使用参数化。 什么是参数化&#xff1f; 参数化是一种将静态值替…

多线程同步有哪几种方法?

有多种方法可以实现多线程同步,以下是一些常见的同步机制和方法: Synchronized 关键字:使用 synchronized 关键字可以将代码块或方法标记为同步块,以确保只有一个线程可以同时访问被同步的代码块或方法。这是最常见的同步方法,适用于简单的同步需求。ReentrantLock:Reent…

机器学习:自然语言处理上的对抗式攻击

Attacks in NLP 相关话题 Introduction 以前的攻击专注于图像和语音上&#xff0c;而NLP上的内容比较少。而NLP的复杂度跟词典有关系&#xff1a; NLP只能在embedding后的特征上加噪声 Evasion Attacks 电影的评论情感分类&#xff0c;将film换成films后&#xff0c;评论从…

SQL中CASE的用法

在SQL中&#xff0c;CASE语句是一种条件表达式&#xff0c;用于根据条件执行不同的操作。它有两种形式&#xff1a;简单CASE表达式和搜索CASE表达式。 简单CASE表达式的语法如下&#xff1a; CASE expressionWHEN value1 THEN result1WHEN value2 THEN result2...ELSE result …

算法通关村第十三关——幂运算问题解析

前言 幂运算为常见的数学运算&#xff0c;形式为 a b a^b ab &#xff0c;其中a为底数&#xff0c;b为指数&#xff0c; 力扣中&#xff0c;幂运算相关的问题主要是判断一个数是不是特定正整数的整数次幂&#xff0c;以及快速幂的处理。 1.求2的幂 力扣231题&#xff0c;给…

open与fopen的区别

1. 来源 从来源的角度看&#xff0c;两者能很好的区分开&#xff0c;这也是两者最显而易见的区别&#xff1a; open是UNIX系统调用函数&#xff08;包括LINUX等&#xff09;&#xff0c;返回的是文件描述符&#xff08;File Descriptor&#xff09;&#xff0c;它是文件在文件…

制作立体图像实用软件:3DMasterKit 10.7 Crack

3DMasterKit 软件专为创建具有逼真 3D 和运动效果的光栅图片而设计&#xff1a;翻转、动画、变形和缩放。 打印机、广告工作室、摄影工作室和摄影师将发现 3DMasterKit 是一种有用且经济高效的解决方案&#xff0c;可将其业务扩展到新的维度&#xff0c;提高生成的 3D 图像和光…

leecode 数据库:1174. 即时食物配送 II

数据导入&#xff1a; Create table If Not Exists Delivery (delivery_id int, customer_id int, order_date date, customer_pref_delivery_date date); Truncate table Delivery; insert into Delivery (delivery_id, customer_id, order_date, customer_pref_delivery_date…

STM32低功耗分析

1.ARM发布最新内核 2023 年5 月 29 日&#xff0c;Arm 公司今天发布了处理器核心&#xff1a;Cortex-X4、Cortex-A720 和Cortex-A520。这些核心都是基于 Arm v9.2 架构&#xff0c;只支持 64 位指令集&#xff0c;不再兼容 32 位应用。Arm 公司表示&#xff0c;这些核心在性能…

postgresql-常用日期函数

postgresql-常用日期函数 简介计算时间间隔获取时间中的信息截断日期/时间创建日期/时间获取系统时间时区转换 简介 PostgreSQL 提供了以下日期和时间运算的算术运算符。 获取当前系统时间 select current_date,current_time,current_timestamp ;-- 当前系统时间一周后的日…

Selenium - Tracy 小笔记2

selenium本身是一个自动化测试工具。 它可以让python代码调用浏览器。并获取到浏览器中加们可以利用selenium提供的各项功能。帮助我们完成数据的抓取。它容易被网站识别到&#xff0c;所以有些网站爬不到。 它没有逻辑&#xff0c;只有相应的函数&#xff0c;直接搜索即可 …

list的用法

list的用法 1、list的遍历2、list的头插、头删、尾插、尾删 【其时间复杂度都是:O(1)】3、find\insert\erase4、sort&#xff1a;底层用的排序思想是 mergesort【归并排序】 1、list的遍历 #include <iostream> #include <list> #include <algorithm> using…

在Linux系统上用C++将主机名称转换为IPv4、IPv6地址

在Linux系统上用C将主机名称转换为IPv4、IPv6地址 功能 指定一个std::string类型的主机名称&#xff0c;函数解析主机名称为IP地址&#xff0c;含IPv4和IPv6&#xff0c;解析结果以std::vector<std::string>类型返回。解析出错或者解析失败抛出std::string类型的异常消…

用友U8与MES系统API接口对接案例分析

企业数字化转型&#xff1a;轻易云数据集成平台助力 U8 ERPMES 系统集成 为什么选择数字化转型&#xff1f; 领导层对企业资源规划&#xff08;ERP&#xff09;的深刻理解促使了数字化转型的启动。采用精确的“N5”滚动计划&#xff0c;为供应商提供充分的预期信息&#xff0c…

Tomcat多实例与负载均衡

Tomcat多实例与负载均衡 一、Tomcat多实例1.1、安装JDK1.2、安装tomcat1.3、配置tomcat环境变量1.4、修改tomcat中的主配置文件1.5、修改启动脚本和关闭脚本1.6、 启动tomcat并查看 二、NginxTomcat负载均衡、动静分离2.1、部署Nginx负载均衡2.2、部署第一台tomcat2.3、部署第二…