2023.11.25 关于 MyBatis 的配置与使用

目录

引言

MyBatis 介绍

掌握两个点

在框架中的定位

创建数据库

配置 MyBatis 

引入依赖

配置文件

创建实体类 

构建 Mapper 层代码实现

添加 mapper 接口

添加 UserMapper.xml 

实现 Service 层 

实现 Controller 层

最终测验 


阅读下面文章之前建议了解并创建一个 Spring Boot 项目

Spring Boot 项目的创建与使用


引言

  • 所谓的 SSM 项目
  • 现在其实指的就是 Spring Boot + Spring MVC + MyBatis 

MyBatis 介绍

  • MyBatis 是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射
  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
  • 简单来说 Mybatis 是更简单完成程序和数据库交互的工具,也就是更简单的操作和读取数据库工具

掌握两个点

  • 配置 MyBatis 开发环境
  • 使用 MyBatis 模式和语法操作数据库

在框架中的定位

  • 框架交互流程图

创建数据库

  • 既然我们要讲解 MyBatis 的配置与使用,数据库的创建是必不可少的
  • 此处我们在本机的 MySQL 数据库中创建一个 message 数据库
  • 且在 message 数据库中再创建一个 user 表,用来存放用户信息
drop database if exists message;
create database message;
use message;

create table user(
    id int primary key auto_increment,
    name varchar(20),
    age int
);

insert into user values(null,"xiaolin",18);
insert into user values(null,"maolin",20);
insert into user values(null,"xiaomei",19);

配置 MyBatis 

引入依赖

  • 我们在 pom.xml 中引入相关依赖
<dependency>
	<groupId>com.mysql</groupId>
	<artifactId>mysql-connector-j</artifactId>
	<scope>runtime</scope>
	</dependency>

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

配置文件

  • 此处配置均在配置文件 application.properties 下添加
# 配置数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/message?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
# 此处填你自己设置的数据库密码
spring.datasource.password=1111
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  • 配置连接字符串
# 配置 mybatis xml 的文件路径
mybatis.mapper-locations=classpath:mybatis/*Mapper.xml
  • 配置 MyBatis 中的 XML 路径
  • 我们需在 resources/mapper 创建所有表的 xml 文件

注意:

  • 当我们仅引入依赖,未配置上述文件
  • 此时启动我们的 SSM 项目,一定会发生报错,即启动失败

  • 数据库连接配置文件:该文件包含了连接数据库所需的信息,如数据库的 URL、用户名、密码等,如果未配置该文件,那么应用程序将无法连接到数据库,从而无法进行数据的读写操作

  • mybatis xml 文件路径:该文件定义了 mybatis 的 SQL 映射语句和结果映射。如果未配置该文件,则 mybatis 将无法找到 SQL 映射语句,从而无法执行数据库操作

创建实体类 

  • 此处我们创建一个 User 实体类为了对应上我们在 message 数据库中创建的 user 表
  • 从而建立好一个映射关系
  • 两点要求:
  • 具有 getter 和 setter 方法
  • 属性名必须与 sql 字段名一致
import lombok.Data;

@Data
public class User {
    private int id;
    private String name;
    private int age;
}
  • 此处我们使用 LomBok 来通过注解给 User 实体类添加上 getter 和 setter 方法

构建 Mapper 层代码实现

  • MyBatis 通过两个部分建立后端和数据库的联系
  • 接口(该接口中的每个方法 均映射了 XML 文件中的具体 SQL 语句)
  • XML 实现接口(用来写具体的 SQL 语句)


添加 mapper 接口

  • 此处我们创建一个 UserMapper 接口
  • 接口下的每个方法就对应 对数据库 user 表的一个操作
  • 这里实现的是根据 id 查询用户信息
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

//添加 @Mapper 注解 代表该接口会伴随着 项目的启动而注入到容器中
@Mapper
public interface UserMapper {
//    根据 id 查询用户信息
    User getUserById(@Param("user_id") Integer id);
}

注意:

  • 此处的 @Param 注解用于给方法的参数重命名

添加 UserMapper.xml 

  • 该 xml 文件需与上述的 mapper 接口相对应

添加 *Mapper.xml  的固定格式

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati
s.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">

</mapper>
  • 因为此处的 UserMapper.xml 需与上文的 UserMapper 接口相对应
  • 即 namespace 需填 UserMapper 接口的文件路径

  • 又因为此处我们需要写的是 根据 id 查询用户信息,即应该使用 select 语句
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati
s.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">

    <select id="getUserById" resultType="com.example.demo.entity.User">
        select * from user where id = ${user_id}
    </select>
    
</mapper>
  • 该新添加的 select 标签具有三处对应关系

实现 Service 层 

  • 在 MyBatis 中,服务层(Service 层)的主要作用是封装业务逻辑
  • 实现业务流程的复杂性,提高代码的可重用性和可维护性
  • 简单来说 服务层中的方法一般用来编排 mapper 层的各个接口,从而实现所需的业务逻辑
  • Controller 会调用 Service 层的方法,而不是直接调用 Mapper 层的方法

实例理解 :

  • 有一个业务逻辑需要在 user 表中连续插入多条数据,则可在 service 层通过 for 循环的方式调用 mapper 层中对应的方法来实现该逻辑

  • 此处我们的业务逻辑很简单
  • 仅实现根据 id 查询用户信息即可

  • UserService 类中具体代码实现
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

//添加 @Service 注解 代表该类会伴随着 项目的启动而注入到容器中
@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User getUserById(Integer id) {
        return userMapper.getUserById(id);
    }
}

实现 Controller 层

  •  控制器层用于直接与客户端进行交互
  • 接收客户端 HTTP 请求,并实现相应的业务逻辑

  • 此处客户端的 HTTP 请求正是想根据 id 查询用户信息

  • UserController 类中具体代码实现
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@ResponseBody
@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/get-user-by-id")
    public User getUserById(Integer id) {
        if(id == null){
            return null;
        }
        return userService.getUserById(id);
    }
}

最终测验 

  • 我们在浏览器的 URL 框中输入与 UserController 所对应的 URL 地址,从而实现调用到 getUserById 方法

  • 如上图所示,我们成功查询到了数据库中 id = 1 的用户信息

  • 看完上述文章后,重新理解下图

  • 这便是上述文章所写的整个交互过程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新手如何对一个web网页进行一次渗透测试

新手如何对一个web网页进行一次渗透测试 文章目录 新手如何对一个web网页进行一次渗透测试什么是渗透测试?渗透测试和红蓝对抗的区别那么拿到一个网站后如何进行一次优雅的渗透测试呢 什么是渗透测试? 在获得web服务运营的公司书面授权的情况下&#xff0c;模拟攻击者的行为…

二进制编辑器hexedit的安装及使用

Hexedit 同时以 ASCII 和十六进制显示文件 安装 终端输入hexedit回车&#xff0c;如果没安装&#xff0c;会提示让输入 sudo apt-get install hexedit 照着输入命令&#xff0c;安装。安装完成后&#xff0c;cd到一个有二进制文件的目录下&#xff0c;输入hexedit命令回车 再…

Java核心知识点整理大全16-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…

Typescript基础面试题 | 03.精选 ts 面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

SpringCloud微服务网关Gateway:gateway基本实现、断言工厂、过滤器工厂、浏览器同源策略、跨域问题解决方案

Gateway网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0和Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API路由管理方式 为什么…

虚拟人物视频

背景 大家好&#xff0c;我是小欣&#xff0c;是这个博客的虚拟助手。在这里&#xff0c;我将为大家提供各种有趣、实用、甚至是意想不到的信息。作为一个年轻的语言模型&#xff0c;我的目标是为你们呈现出最有趣和有深度的内容。 我喜欢与大家分享知识、解答问题&#xff0…

视频格式转换:将MP4轻松转MKV格式,高效便捷

随着科技的发展&#xff0c;数字媒体已经深入到生活中&#xff0c;视频格式的转换也成为了许多人的日常要求。MP4和MKV是两种常见的视频格式&#xff0c;它们各有优点。MP4以其高效的压缩比和广泛的兼容性被广泛使用&#xff0c;而MKV则因其强大的封装能力和无损压缩而受到喜爱…

提升逼格,自己搭建博客网站不求人

背景 对于一个热爱分享知识和经验的大佬来说&#xff0c;搭建一个自己的个人博客是十分必要的。因为各个免费写博客平台都会有每天写博客限制&#xff0c;比如我现在这篇文章的限制&#xff0c;就是每天最多发表3篇&#xff0c;同时还给我的博客添加一大波广告&#xff0c;真是…

网络编程基本概念

网络编程基本概念 为什么需要网络编程&#xff1f; 用户在浏览器中&#xff0c;打开在线视频网站&#xff0c;如优酷看视频&#xff0c;实质是通过网络&#xff0c;获取到网络上的一个视频资源。 与本地打开视频文件类似&#xff0c;只是视频文件这个资源的来源是网络。 相…

人工智能_机器学习051_支持向量机SVM概念介绍_理解support vector machine---人工智能工作笔记0091

在出现深度学习,神经网络算法之前,支持向量机已经可以解决很多问题了,我们自然界中的问题,无非就是可以转换为回归问题和分类问题. 然后从现在开始我们来看支持向量机,首先看一下这几个字 support 是支持 vector是向量的意思,然后 machine指的是机器 那么我们之前用到的模型…

【Java】实现一个自己的定时器

上文讲了怎样使用Java自带的定时器【Java】定时器的简单应用 这篇博客就来讲如何来编写一个自己实现的定时器 1、代码框架 由定时器的使用方法得知&#xff0c;我们在使用定时器的时候会添加一个任务timerTask类&#xff0c;而timer类则是我们行使任务的类&#xff0c;因此可…

深入解析:如何开发抖音票务小程序

当下&#xff0c;开发抖音票务小程序成为了吸引年轻用户群体的一种创新方式。本文将深入解析如何开发抖音票务小程序&#xff0c;探讨关键步骤和技术要点。 1.确定需求和功能 考虑到抖音的用户特点&#xff0c;可以加入与短视频相关的票务功能&#xff0c;如在线购票、观影记录…

vim+xxd编辑十六进制的一个大坑:自动添加0x0a

问题描述 今天在做一个ctf题&#xff0c;它给了一个elf文件&#xff0c;我要做的事情是修复这个elf文件&#xff0c;最后执行它&#xff0c;这个可执行文件会计算它自身的md5作为这道题的flag。我把所有需要修复的地方都修复了&#xff0c;程序也能成功运行&#xff0c;但是fl…

百度 Comate 终于支持 IntelliJ IDEA 了

大家好&#xff0c;我是伍六七。 对于一直关注 AI 编程的阿七来说&#xff0c;编程助手绝对是必不可少的&#xff0c;除了 GitHub Copilot 之外&#xff0c;国内百度的 Comate 一直是我关注的重点。 但是之前&#xff0c;Comate 还支持 VS code&#xff0c;并不支持 IntelliJ…

Android 相机库CameraView源码解析 (二) : 拍照

1. 前言 这段时间&#xff0c;在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位&#xff0c;在项目前期&#xff0c;的确为我们节省了不少时间。 但随着项目持续深入&#xff0c;对于CameraView的使用进入深水区&#xff0c;逐…

哈希思想的应用

目录 1.位图 位图的实现 题目变形一 题目变形二 题目变形三 总结&#xff1a; 2.布隆过滤器 概念 布隆过滤器的实现 3.哈希切割的思想 1.位图 哈希表和位图是数据结构中常用的两种技术。哈希表是一种数据结构&#xff0c;通过哈希函数把数据和位置进行映射&#xff0c…

公司人事管理系统

1.问题描述 一个小公司包含四类人员&#xff1a;经理&#xff0c;技术人员&#xff0c;销售人员和销售经理&#xff0c;各类人员的工资计算方法如下&#xff1a;经理&#xff1a;固定月薪&#xff08;8000&#xff09;&#xff1b;技术人员&#xff1a;月薪按技术等级&#xf…

【LeetCode】挑战100天 Day15(热题+面试经典150题)

【LeetCode】挑战100天 Day15&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-172.1 题目2.2 题解 三、面试经典 150 题-173.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&…

AI视频生成工具——Runway gen2 全功能超详细使用教程(2)

昨天给大家分享了Runway Gen1的使用教程&#xff0c;一篇文章就能让你轻松掌握使用文字和图像从现有视频生成新的视频技能&#xff0c;还没有看过的同学们可以回看过往文章。 Runway视频生成功能有3大核心成品 Gen1&#xff1a;视频转视频工具Gen2&#xff1a;视频生成编辑工…

阅读笔记——《Removing RLHF Protections in GPT-4 via Fine-Tuning》

【参考文献】Zhan Q, Fang R, Bindu R, et al. Removing RLHF Protections in GPT-4 via Fine-Tuning[J]. arXiv preprint arXiv:2311.05553, 2023.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&#xff0c;请联系作者删除。 目录 摘要 一、介绍 二、背景 三、方法…