MyBatis 之基础概念与框架原理详解

简介: MyBatis是一款轻量级半自动ORM框架,封装JDBC,让开发者专注SQL编写与业务逻辑;支持XML/注解配置、动态SQL、高级映射,SQL与代码分离,灵活高效,显著提升持久层开发效率。(239字)

💡【开发哲学共勉】

MyBatis 用半自动化的 ORM 魔法,将数据库表织成对象世界的经纬,让 SQL 操作如调用方法般丝滑,从此告别 JDBC 的繁琐,让开发者在业务海洋中轻装上阵

🎉 前言

在之前操作数据库时,都会用到JDBC,但是像这样写代码,都会有些麻烦,因为要写的代码很多,层次也多

MyBatis的出现,让我们程序员只需要写SQL代码即可操作数据库,让我们的开发效率变得更高效,那现在来一起开启MyBatis的学习之旅吧~   (๑•̀ㅂ•́)و✧

个人主页:艺杯羹 🌿

系列专栏:MyBatis🚀

1. 📚Mybatis介绍

Mybatis是一个ORM框架,现在分别介绍一下

1.1. 🧩框架

框架简单来说,就是一个半成品软件,在实际的开发中,对于那些简单可复用的代码,可以提取出成一个框架,直接使用这个框架就可以了

框架的好处:

  1. 节约时间
  2. 可以让程序员更专注于业务层,而非只专注于技术层

1.2. 🔗ORM框架

ORM(Object Relationl Mapping),对象关系映射
也就是用于 数据库 和 类对象 之间的映射
ORM框架就是用来代替之前的JDBC操作的,这样就大大的提高了开发效率

1.3. 🚀MyBatis

MyBatis是一个半自动化的ORM框架,MyBatis是对JDBC的一个封装,使用它,就不用再写JDBC代码了,直接操作SQL语句即可

提到了半自动话,当然还有全自动话
全自动化ORM框架 --- Hibernate
因为它的学习成本高和不灵活导致现在很少有企业使用

2. 🔧MyBatis 入门

2.1. 🏗️环境搭建

这里先按步骤搭建一下环境

2.1.1. 新建空项目

2.1.2. 创建Maven工程


2.1.3. 在pom.xml中的标签中引入依赖

<dependencies>
  <!--  mybatis  -->
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
  </dependency>
  <!--  mysql驱动包  -->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
  </dependency>
  <!--  junit  -->
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
  </dependency>
  <!--  log4j  -->
  <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.12</version>
  </dependency>
</dependencies>

2.1.4. 创建mybatis核心配置文件SqlMapConfig.xml

这个核心配置文件是放在resources资源包下的

再将以下内容复制到核心配置文件中

<?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>
  <!--  配置环境  -->
  <environments default="mysql">
    <environment id="mysql">
      <!--  事务类型  -->
      <transactionManager type="JDBC"></transactionManager>
      <!--  数据源  -->
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
</configuration>

2.1.5. 在resource下创建log4j.properties,让控制台打印SQL语句


将以下内容复制进去

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
#log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%d{MM/dd HH:mm:ss}] %-6r [%15.15t] %-5p %30.30c %x - %m\n

2.1.6. 根据数据库表创建实体类

这里提供一个数据库表,大家可以自己直接复制过去用,或者是用自己的

CREATE TABLE user (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255),
    sex VARCHAR(255),
    address VARCHAR(255)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2.2. 🗂️创建持久层接口和映射文件

2.2.1. 在java目录创建持久层接口


结构还是要有的,在mapper包下创建

public interface UserMapper {
  List<User> findAll();
}

2.2.2. 在resource目录创建映射文件

<?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">
<!--namespace  要和对应的 Mapper 接口的全限定名一致-->
<mapper namespace="com.yibeigen.mapper.UserMapper">
    <!-- select 查询 -->
    <!--resultType 是返回值类型 -->
    <!--id 是方法名 -->
    <select id="findAll" resultType="user">
        select * from user
    </select> 
</mapper>

2.2.3. 将映射文件配置到mybatis核心配置文件SqlMapConfig.xml中

<!-- 注册映射文件 -->
<mappers>
   <mapper resource="com/yibeigen/mapper/UserMapper.xml"></mapper>
</mappers>

2.2.4. 编写映射文件的注意事项

  1. 映射文件要和接口名称相同
  2. 映射文件要和接口的目录结构相同
  3. 映射文件中的属性
  1. namespace属性写接口全名
  2. id属性是接口的方法名
  3. resultType属性是接口的返回值
  4. parameterType属性是接口方法的参数类型
  5. resultType、parameterType属性要写全类名
    如果是集合类型,就写泛型的全类名

2.2.5. 测试持久层接口方法

和Maven的操作一样,在test包下创建测试方法

@Test
public void testFindAll() throws Exception {
  // (1)读取核心配置文件
  InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
  // (2)创建SqlSessionFactoryBuilder对象
  SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
  // (3)SqlSessionFactoryBuilder对象获取SqlSessionFactory对象
  SqlSessionFactory factory = builder.build(is);
  // (4)SqlSessionFactory对象获取SqlSession对象
  SqlSession session = factory.openSession();
  // (5)SqlSession对象获取代理对象
  UserMapper userMapper = session.getMapper(UserMapper.class);
  // (6)代理对象执行方法
  List<User> all = userMapper.findAll();
  all.forEach(System.out::println);
  // (7)释放资源
  session.close();
  is.close();
}

因为我输出是直接输出对象,那么这个输出和你重写的tostring方法有关
这里就先让大家感受一下这个MyBatis大致是如何操作的(๑•̀ㅂ•́)و✧

3. 🔍总结

到此MyBatis的介绍与快速入门就讲到这里
如果觉得还可以的话,帮忙点赞,关注呢,万分感谢(๑•̀ㅂ•́)و✧

目录
相关文章
阿里云轻量应用服务器68元/年,新用户特价,不要退款,重新买价格459元,涨价了!
阿里云轻量应用服务器新用户专享价68元/年(2核2G、200M带宽、40GB ESSD),秒杀低至38元。⚠️地域选定后不可修改,退款将失去新用户资格,再购恢复原价459元/年!务必下单前确认地域,避免浪费优惠。阿里云轻量应用服务器官网:https://t.aliyun.com/U/dwftch
|
2月前
|
Java 程序员 应用服务中间件
Maven之初识与安装
本文详解Maven安装与配置全流程:从基础概念、下载安装、环境变量配置到版本验证,助新手一次理清逻辑、顺利完成部署;涵盖一键构建、依赖管理核心功能,并提供交流支持。
190 0
Maven之初识与安装
|
2月前
|
人工智能 安全 中间件
AI 帮你改了 20 个文件,最后 3 个忘了改——长任务为什么总是"差一口气"?
AI长任务常因“失忆”、误删、静默跳过、截断编造等问题翻车。UseIO通过Plan驱动拆解、检查点回滚、三级安全门控、结构化错误处理与交付前四点复查,构建工程级可靠性防护链,显著提升多文件重构等复杂任务的完成率与稳定性。(239字)
|
2月前
|
C语言 数据安全/隐私保护
二级C语言题解:二维数组每行最大值与首元素交换、删除结构体的重复项、取出单词首字母
本教程专为C语言二级考生、中职学生及编程初学者设计,涵盖三大核心题型:二维数组每行最大值与首元素交换、结构体重复项删除(保留首个)、字符串单词首字母提取。含详细分析、易错点解析与标准代码,助你夯实基础、提升解题思维。
104 2
二级C语言题解:二维数组每行最大值与首元素交换、删除结构体的重复项、取出单词首字母
|
2月前
|
C语言 索引
二级C语言题解:迭代求根、字符串加法、字符串拆分
本文详解三道C语言编程题:①迭代法求平方根(牛顿法),误差≤1e-6;②字符串模拟大数加法,处理进位与字符数字转换;③字符串按索引模3拆分为三子串。含填空、修改、设计三类题型及完整解析代码。
86 1
二级C语言题解:迭代求根、字符串加法、字符串拆分
|
2月前
|
人工智能 C语言
二级C语言题解:十进制转其他进制、非素数求和、重复数统计
本文详解三类经典编程题:十进制转任意进制(填空)、非素数求和(修改)与重复数字统计(设计),含完整代码、逐空分析及易错点解析,助你夯实C语言基础。
136 2
二级C语言题解:十进制转其他进制、非素数求和、重复数统计
|
2月前
|
前端开发 Java 测试技术
Maven 之工程构建与依赖管理全攻略
本文系统讲解Maven核心知识:涵盖POM/JAR/WAR工程类型与标准目录结构;详解构建生命周期(validate→compile→test→package→install→deploy)及常用命令;深入解析本地/远程/中央仓库机制,并指导配置本地仓库路径、阿里云镜像及JDK版本。内容精炼实用,助开发者快速掌握Maven项目管理精髓。
145 1
Maven 之工程构建与依赖管理全攻略
|
2月前
|
存储 C语言
C语言二级题解:查找字母以及其他字符个数、数字字符串转双精度值、二维数组上下三角区域数据对调
本文详解C语言二级考试三类典型题:统计字母及非字母字符个数、数字字符串转双精度浮点数、二维数组上下三角区域数据对调。含题目解析、错误定位与完整代码,适合备考学生、中职生及编程爱好者提升实战能力。
130 1
C语言二级题解:查找字母以及其他字符个数、数字字符串转双精度值、二维数组上下三角区域数据对调
|
2月前
|
缓存 人工智能 计算机视觉
Qwen3.8-Flash模型介绍:能力、上下文限制、费用定价详细说明
通义千问最新多模态大模型Qwen3.8-Flash(ID:qwen3.8-flash),原生支持百万级上下文(100万tokens)、文本/图像/视频输入,输出为文本。具备Function Calling、结构化输出、联网搜索(限北京/新加坡)等能力,兼容OpenAI/Anthropic协议,已在阿里云百炼平台开放免费试用(赠100万Tokens)。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
|
2月前
|
缓存 测试技术 API
大模型API中转站避坑:满血验证、倍率换算与降智识别(附压测代码)
从工程师视角系统梳理大模型API中转站的评估方法:讲清兑换比例与倍率的真实换算关系,给出满血模型验证三招(复杂推理压测、模型指认、长上下文压力测试)与可运行的Python压测脚本,并总结稳定性、协议兼容、计费透明等接入要点和先测后充的避坑建议。

热门文章

最新文章