当前位置: 首页 > news >正文

MyBatis实战指南(一)MyBatis入门基础与利用IDEA从零开始搭建你的第一个MyBatis系统

MyBatis实战指南(一)MyBatis入门基础与利用IDEA从零开始搭建你的第一个MyBatis系统

  • 一、什么是MyBatis
    • 1. MyBatis 是什么?
    • 2. JDBC 的三大痛点
    • 3. MyBatis 的核心优势
      • 1. 告别重复代码,专注核心逻辑
      • 2. 灵活控制 SQL,适应各种场景
      • 3. 自动映射数据,减少人为错误
  • 二、搭建你的第一个MyBatis系统
    • 步骤一:配置并添加Maven文件
    • 步骤二:新建一个MyBatis项目
    • 步骤三:导入MyBatis的包
    • 步骤四:创建实体类
    • 步骤五:创建Mapper接口
    • 步骤六:创建MyBatis配置文件
    • 步骤七:创建SQL映射文件
    • 步骤八:编写测试代码


在之前的学习中,我们已经掌握了Java Web开发的基础知识

  • 通过Servlet和JSP实现了动态Web页面的开发
  • 利用HTML/CSS/JavaScript搭建了美观的前端界面
  • 理解了MVC架构模式,学会了分层开发

现在,我们的Java Web开发框架已经初具雏形

  • 但在实际项目中,还有一个重要的环节需要解决——如何高效地与数据库进行交互

传统的JDBC编程存在大量重复代码,开发效率低下;而完全自动化的ORM框架又不够灵活。这时,MyBatis框架应运而生。

MyBatis是什么?

  • 它是一款优秀的持久层框架
  • 支持自定义SQL、存储过程以及高级映射
  • 避免了几乎所有的JDBC代码和手动设置参数
  • 可以通过XML或注解的方式配置和映射原生信息

让我们一起开启MyBatis的学习之旅,为你的Java Web开发技能栈增添强大的工具

在这里插入图片描述

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的MyBatis知识文章专栏
https://blog.csdn.net/2402_83322742/category_12969707.html?spm=1001.2014.3001.5482
欢迎来阅读指出不足


一、什么是MyBatis

1. MyBatis 是什么?

如果把开发软件比作盖房子,那么 「持久层」 就像是房子的地基:专门负责把数据(比如用户信息、订单记录)存到数据库(类似数据仓库)里,或者从数据库取出来。

  • MyBatis 就是这个地基的高效施工队,帮你轻松搞定 Java 程序和数据库之间的交互

简单来说

  • MyBatis 是一个能让 Java 代码和数据库友好对话的桥梁。它解决了传统 JDBC 编程的痛点,让你不用再写大量重复的「连接数据库 - 执行 SQL - 处理结果」的代码,只需要专注写核心的 SQL 语句和定义数据映射规则。

2. JDBC 的三大痛点

假设用 JDBC 实现「查询用户信息」功能,需要手动完成以下 5 步重复操作

  1. 获取数据库连接(处理异常)
  2. 拼接 SQL 语句(易出错,如引号未闭合)
  3. 设置 SQL 参数(如给 SELECT * FROM user WHERE id=? 赋值)
  4. 遍历结果集,手动将数据库行转为 Java 对象(如 User 实例)
  5. 关闭连接、释放资源

而用 MyBatis,这些体力活全由框架自动完成!你只需要做两件事

  • 写接口(定义功能,如 User getUserById(int id)
  • 写 SQL 映射文件(定义具体 SQL,如 <select id="getUserById" resultType="User">SELECT * FROM user WHERE id=#{id}</select>

在这里插入图片描述

3. MyBatis 的核心优势

1. 告别重复代码,专注核心逻辑

  • JDBC 开发中,80% 代码是重复的(连接、关闭、结果处理);
  • MyBatis 封装底层操作,开发者只需写 业务 SQL 和对象映射,效率提升 50%+。

2. 灵活控制 SQL,适应各种场景

  • 简单场景:用注解(如 @Select("SELECT * FROM user WHERE id=#{id}"))直接在接口中写 SQL,快速开发;
  • 复杂场景:用 XML 文件写 SQL,支持 动态 SQL(条件拼接 AND/OR)、存储过程、多表关联查询,可优化 SQL 性能。

3. 自动映射数据,减少人为错误

  • 数据库字段(如 user_iduser_name)自动映射到 Java 对象属性(userIduserName),支持驼峰命名转换;
  • 无需手动写 resultSet.getString("user_name") 等代码。

在这里插入图片描述

二、搭建你的第一个MyBatis系统

  • 我们的任务是使用MyBatis的知识来连接我们数据库中emp表的信息,并打印到终端中
    在这里插入图片描述

步骤一:配置并添加Maven文件

  • 首先打开利用vscode打开maven文件里面的conf文件
    在这里插入图片描述
  • 找到setting.xml文件

在这里插入图片描述

  • 单击利用vscode或者其他编辑软件打开它

  • 找到里面的mirros文件,替换为国内阿里云镜像(国外的网速慢)在这里插入图片描述

  • 国内阿里云镜像

<mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>
  • 粘贴过去替换掉原来的镜像文件

  • 然后保存

  • 点击最右边的maven按钮
    在这里插入图片描述

  • 找到maven设置
    在这里插入图片描述

  • 将自己的maven文件导入里面
    在这里插入图片描述

步骤二:新建一个MyBatis项目

  • 接着我们需要打开IDEA然后新建一个MyBatis项目
    在这里插入图片描述

  • 然后删除java文件里面多余的内容

在这里插入图片描述

  • 接着右键单击MyBatis项目,新建一个MyBatis模板

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 继续按照上面的操作,删除MyBatis01java文件下所有的文件

在这里插入图片描述

步骤三:导入MyBatis的包

  • 接着在Maven网站搜索找到并导入MyBatis的包

Maven官网
https://mvnrepository.com/search?q=mybatis

在这里插入图片描述

  • 我们在导入MyBatis的包之前必须有jdbc的驱动包,这里我直接把jdbc和MyBatis的依赖包打出来
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.19</version>
</dependency>
  • 接着为了更加方便我们运行项目,我们还需要下载junit的依赖包

Maven junit依赖包官网
https://mvnrepository.com/search?q=junit

在这里插入图片描述

  • 找到第二个junit依赖包下载junit
    在这里插入图片描述
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope>
</dependency>
  • 接着为了方便我们以后跟好的编写java类,我们需要下载lombok
    • Lombok 是一个 Java 库,能通过注解的方式自动生成 Java 类中的样板代码(如 getter/setter、构造函数、toString 方法等),从而减少代码冗余,提高开发效率。
      在这里插入图片描述
      在这里插入图片描述
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.38</version><scope>provided</scope>
</dependency>
  • 一共下载4个驱动包
 <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.19</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.38</version><scope>provided</scope></dependency><!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies>

步骤四:创建实体类

  • 首先我们需要在main/java包下创建com.niit的包
  • 接着在com.niit包里再创建俩个包mapper和pojo
  • 在基于 MyBatis 的开发中,mapper 包和 pojo 包承担着不同但关键的角色:

pojo 包(Plain Old Java Object,简单 Java 对象)

  • 作用:用于存放实体类,这些类的属性与数据库表的字段一一对应,主要作为数据载体,用于封装从数据库查询到的数据,或作为向数据库插入数据的对象。
  • 特点:通常只包含属性及其对应的 gettersetter 方法(使用 Lombok 时可通过注解简化代码),不包含业务逻辑。例如,数据库中有 emp 表,pojo 包下的 Emp 类就会有 eid(员工 ID)、ename(员工姓名)等属性,用于映射表中字段,方便程序对数据进行操作。

mapper

  • 作用:存放 MyBatis 的 Mapper 接口及对应的 SQL 映射文件(如 XML)。
    • Mapper 接口:定义与数据库交互的抽象方法,如查询、插入、更新、删除等操作。例如 EmpMapper 接口中定义 selectAllEmps() 方法表示查询所有员工。
    • SQL 映射文件:编写具体的 SQL 语句,通过 namespace 与 Mapper 接口绑定,通过 id 与接口中的方法对应。例如在 EmpMapper.xml 中定义 <select id="selectAllEmps">SELECT * FROM emp</select>,实现对数据库的查询操作。
  • 特点:将 SQL 语句与业务代码分离,提高代码的可维护性和复用性,同时支持面向接口编程,解耦业务逻辑与数据访问层。

在这里插入图片描述

  • pojo包下创建Emp.java,映射数据库表结构:
    在这里插入图片描述

在这里插入图片描述

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
public class Emp {private int eid;private String ename;private String fid;}

在这里插入图片描述

步骤五:创建Mapper接口

在这里插入图片描述

mapper包下创建EmpMapper.java,定义数据库操作方法:
在这里插入图片描述

package com.niit.mapper;import com.niit.pojo.Emp;import java.util.List;public interface EmpMapper {List<Emp> selectAllEmps();
}

步骤六:创建MyBatis配置文件

在这里插入图片描述

resources目录下创建mybatis-config.xml,配置数据库连接:

数据库连接官网模板
https://mybatis.net.cn/getting-started.html
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 数据库环境配置 --><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/your_database"/><property name="username" value="root"/><property name="password" value="your_password"/></dataSource></environment></environments><!-- 注册Mapper映射文件 --><mappers><mapper resource="mapper/EmpMapper.xml"/></mappers>
</configuration>

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 数据库环境配置 --><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/2023se3"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!-- 注册Mapper映射文件 --><mappers><mapper resource="mapper/EmpMapper.xml"/></mappers>
</configuration>

步骤七:创建SQL映射文件

resources/mapper目录下创建EmpMapper.xml,编写SQL语句:

SQL语句官网模板
https://mybatis.net.cn/getting-started.html
在这里插入图片描述

<?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.niit.mapper.EmpMapper"><!-- 查询所有员工 --><select id="selectAllEmps" resultType="com.niit.pojo.Emp">SELECT * FROM emp</select>
</mapper>

步骤八:编写测试代码

test/java目录下创建MyTest.java,验证功能:

import com.niit.pojo.Emp;
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.InputStream;
import java.util.List;public class MyTest {@Testpublic void testSelectAllEmps() throws IOException {// 加载MyBatis配置文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 执行SQL查询try (SqlSession session = sqlSessionFactory.openSession()) {EmpMapper mapper = session.getMapper(EmpMapper.class);List<Emp> emps = mapper.selectAllEmps();// 打印结果for (Emp emp : emps) {System.out.println(emp);}}}
}
  • 然后运行
  • 可以看到我们的数据库信息打印到控制台了
    在这里插入图片描述

以上就是这篇博客的全部内容,下一篇我们将继续探索MyBatis的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的MyBatis知识文章专栏
https://blog.csdn.net/2402_83322742/category_12969707.html?spm=1001.2014.3001.5482
我的JSP知识文章专栏
https://blog.csdn.net/2402_83322742/category_12950980.html
我的java-servlet知识文章专栏
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482
我的HTML专栏
https://blog.csdn.net/2402_83322742/category_12834817.html?spm=1001.2014.3001.5482
欢迎来阅读指出不足

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

相关文章:

  • ELK简介和docker版安装
  • 【C++】vector:容器的别样风采
  • window 显示驱动开发-准备 DMA 缓冲区
  • 日志根因分析:Elastic Observability 的异常检测与日志分类功能
  • 企业终端设备的安全管控
  • 基于Spring Boot与jQuery的用户管理系统开发实践✨
  • 自动化测试核心知识梳理与 Java 代码详解
  • Python列表推导式和生成器表达式详解
  • 【鸿蒙开发】安全
  • CentOS 7连接公司网络配置指南
  • c++学习方向选择说明
  • 普通人如何开发并训练自己的脑力?
  • 【移动应用安全】Android系统安全与保护机制
  • python学习day2
  • BeanFactory和FactoryBean的区别
  • 怎么样进行定性分析
  • SeleniumBase - 多合一浏览器自动化框架
  • 初识函数------了解函数的定义、函数的参数、函数的返回值、说明文档的书写、函数的嵌套使用、变量的作用域(全局变量与局部变量)
  • leetcode hot100:一、解题思路大全:技巧(只出现一次的数字、多数元素、颜色分类、下一个排列、寻找重复数)、矩阵(矩阵置零、螺旋矩阵、旋转图像、搜索二维矩阵Ⅱ)
  • Python 训练营打卡 Day 29
  • 国家统计局督察组:江苏有关地区仍存在干预数据上报等问题
  • 菲律宾华人“钢铁大王”撕票案两主谋被捕,部分赎金已被提取
  • 香港油麻地旧警署将向游客开放
  • 事关政府信息公开,最高法发布最新司法解释
  • 家国万里·时光故事会|从徐光启到徐家汇,一颗甘薯里的家国
  • 国家发改委:内卷式竞争扭曲市场机制、扰乱公平竞争秩序,必须整治