【MyBatis学习】MyBatis操纵数据库进行查询操作 ?MyBatis与JDBC想比怎么样,赶快与我一起探索吧 ! ! !

news2024/11/22 11:30:42

前言:
大家好,我是良辰丫,从今天开始我们就要进入MyBatis的学习了,请君与我一起操纵数据库,MyBatis到底是什么呢?我们慢慢往下瞧! ! !💌💌💌

🧑个人主页:良辰针不戳
📖所属专栏:javaEE进阶篇之框架学习
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💌作者能力有限,可能也会出错,欢迎大家指正。
💞愿与君为伴,共探Java汪洋大海。

在这里插入图片描述

目录

  • 1. 初识MyBatis
    • 1.1 走进MyBatis
    • 1.2 认识SSM
  • 2. MyBatis的查询具体步骤
    • 2.1 创建一个表
    • 2.2 创建 SSM项目
    • 2.3 数据库进行配置
    • 2.4 配置 MyBatis 中的 XML 路径
    • 2.5 实现业务代码
      • 2.5.1 实现实体类
      • 2.5.2 构造mapper层次的代码
      • 2.5.3 创建xml
      • 2.5.4 实现服务层
      • 2.5.5 实现控制器
      • 2.5.6 验证程序
  • 3. 简单描述上述交互过程

1. 初识MyBatis

1.1 走进MyBatis

在学习MyBatis的用法之前我们首先要对MyBatis的基本概念有一定的了解,要不然学习起来会变得一团糟.

  • MyBatis 是⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射。MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接⼝和 Java POJO(Plain Old Java Objects,普通⽼式 Java 对象)为数据库中的记录。
  • 简单来说 MyBatis 是更简单完成程序和数据库交互的⼯具,也就是更简单的操作和读取数据库的工具,其实MyBatis本质上还是调用JDBC,只不过是框架帮我们做了一定的优化.

MyBatis的好处?
我们已经有了JDBC,为什么还要学习MyBatis呢?

  • JDBC比较繁琐,步骤很多,没进行一次不同的数据库操作,都需要把繁琐的步骤写一次.
  • MyBatis本质上还是调用 JDBC,但是它简化了很多工作,MyBatis在创建的时候大家会感到很繁琐,但是创建好了,大家用的时候会发现是真的香.

1.2 认识SSM

  • 在之前没有Spring Boot的时候,所谓的SSM是Spring + Spring MVC + MyBatis.
    此时我们是使用maven进行项目创建的.
  • 后来Spring Boot诞生,我们发现这个东西是真的香,渐渐地,程序员就几乎不再使用Spring 了,Spring Boot仿佛代替了Spring ,此时所谓的SSM是Spring Boot+ Spring MVC + MyBatis,其实Spring Boot内置了所有的东西.
  • 但是在面试的时候,面试官问我们SSM是什么,我们答老版和新版的都可以,这些只是历史背景,大家简单的了解即可.

2. MyBatis的查询具体步骤

接下来我们就要开始实现我们的第一个MyBatis的查询功能,刚开始学起来可能有点困难,因为创建的时候比较繁琐,不要慌哈,多操作几次就可以了,熟能生巧.

2.1 创建一个表

我们首先需要建库建表,这是实现我们查询功能的前提.


-- 创建数据库
drop database if exists student;
create database student DEFAULT CHARACTER SET utf8mb4;

-- 使用数据库
use student;

-- 创建学生表
drop table if exists stu;
create table stu(
    id int primary key auto_increment,
    name varchar(20) not null,
    age int
)default charset 'utf8mb4';

我们先在里面添加一条数据

insert into stu values(null,'张三',18);

在这里插入图片描述

2.2 创建 SSM项目

创建SSM项目就是在创建Spring Boot的基础上,Spring Boot相当于一个容器,它内置了很多框架,创建Spring Boot的过程我就不做详细描述,我们在Spring Boot的文章中已经做了详细的描述,大家可以去看一下.

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

我们需要去选择我们的MyBatis框架,注意,我们还需要选择我们的数据库,我们使用的是mysql,因此选择mysql.

在这里插入图片描述

在这里插入图片描述

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

此时我们虽然创建好了SSM项目,但是我们直接运行回报错,异常退出,因为我们的SSM项目没有配置数据库相关的信息,因此我们找不到数据库,所以会报错.

在这里插入图片描述

2.3 数据库进行配置

我们在Spring Boot里面学习了两种格式的配置,因此两种配置都可以,使用其中一种即可,在本篇文章中,我们主要使用properties配置.

yml配置文件

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

properties配置文件

spring.datasource.url=jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

2.4 配置 MyBatis 中的 XML 路径

直接加到配置文件中,在后续的内容中,我们以properties配置文件进行讲解.

spring.datasource.url=jdbc:mysql://localhost:3306/student?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
# 注意!写你自己的密码
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# mybatis xml 配置 MyBatis 中的 XML 路径
mybatis.mapper-locations=classpath:mybatis/*Mapper.xml

2.5 实现业务代码

接下来我们创几个包,为什么要创包呢?我们从现在开始要严格按照项目的要求进行操作,写代码,各个层次里面放不同类型的代码.

在这里插入图片描述

2.5.1 实现实体类

entity里面放的是实体类,我们先放一个实体类

package com.example.demo.entity;

import lombok.Data;

@Data
public class Stu {
    private int id;
    private String name;
    private int age;
}

2.5.2 构造mapper层次的代码

我们先创建一个接口.

package com.example.demo.mapper;

import com.example.demo.entity.Stu;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface StuMapper {
    Stu getStuId(@Param("id") Integer id);
}

2.5.3 创建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">
<!--namespace是命名空间,表示实现哪个接口-->
<mapper namespace="com.example.demo.mapper.StuMapper">

    <select id="getStuId" resultType="com.example.demo.entity.Stu">
        select * from stu where id=${id}
    </select>

    </mapper>

2.5.4 实现服务层

  • 有人可能会有疑惑,这里能直接注入接口嘛?框架的功能是非常强大的,它会帮我们做这些.
  • 如果有多个相同名字的接口呢?我们可以采用命名的方式进行区分.
  • ①@Resource
  • ②@Autowired+@Qualifier
package com.example.demo.service;

import com.example.demo.entity.Stu;
import com.example.demo.mapper.StuMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class StuService {
    @Autowired
    private StuMapper stuMapper;

    public Stu getUserById(Integer id) {
        return stuMapper.getStuId(id);
    }

}

2.5.5 实现控制器

package com.example.demo.controller;

import com.example.demo.entity.Stu;
import com.example.demo.service.StuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class Controller {

    @Autowired
    private StuService stuService;

    @RequestMapping("/id")
    public Stu getUserById(Integer id) {
        if (id == null) return null;
        return stuService.getUserById(id);
    }
}

下面是我们完整的目录结构.

在这里插入图片描述

2.5.6 验证程序

我们通过浏览器进行访问id为1的数据,访问成功,说明我们的程序成功了.

在这里插入图片描述

3. 简单描述上述交互过程

  • 前端访问后端,也就是浏览器发送访问请求.
  • 请求传给控制器,进行参数验证.
  • 验证成功后控制器调用服务器.
  • 服务器调用mapper层的接口和xml文件.
  • mapper向数据库索要内容,返回给服务器.
  • 服务器返回给控制器.
  • 控制器把内容返回给浏览器.

在这里插入图片描述

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

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

相关文章

前端——自定义组件

目录 一、创作纪念日——6月7日&#xff08;机缘巧合&#xff09; 二、收获 三、前端组件 3.1、重要的CSS 3.2、实用组件 1、站点访问次数 2、鼠标样式 3、烟花点击特效 4、GIF动态小人&#xff08;出现在左下角&#xff09; 5、天气插件 6、音乐播放器 3.3、CSS组…

leetcode337. 打家劫舍 III(java)

打家劫舍 leetcode337. 打家劫舍 III题目描述 暴力递归解题思路代码演示 递归加缓存代码演示 动态规划专题 leetcode337. 打家劫舍 III 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/house-robber-iii 题目描述 小偷又…

湖南大学CS-2019期末考试解析

【特别注意】 答案来源于@wolf 是我在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 有必要一做。 【试卷与答案】 一. 填空题(10 分,每空 2 分) 1. 0xb1e56f07 存放在采用小端存储的机器上,地址为 0x3287 到 0x328a ,则 0x3288 处存…

远程仓库拉不下来怎么办

因为项目需要做一个word转pdf的功能, 当我想要从阿里的仓库引入依赖时发现版本一直报错,无论怎么引入都爆红😭😭 *我将aspose的包先下载到本地,然后再安装安装到本地的maven仓库* mvn install:install-file -Dfile=C:\Users\Administrator\Downloads\aspose-words-18.…

Day01 项目简介分布式基础概念 -谷粒商城

最近在改进公司开发的商城项目&#xff0c;看到了尚硅谷的谷粒商城&#xff0c;就快速学习了下&#xff0c;因为之前的Kafka,Redis都是在这学习的&#xff0c;还有大数据的Flink。所以感觉一定不错&#xff0c;就开始了。 这里做一下学习笔记 一、项目简介 1 、项目背景 1 &…

一文看懂分布式存储 Ceph 架构原理

【摘要】本文带你层层深入Ceph的架构原理、读写原理&#xff0c;从而理解Ceph的特性及其应用场景。 1. 什么是Ceph&#xff1f; 首先&#xff0c;我们从 Ceph的官方网站上&#xff0c;可以看到&#xff1a;“Ceph is a unified, distributed storage system designed for exc…

第六章volatile详解

文章目录 volatile修饰的变量有2大特点volatile的内存语义 内存屏障是什么内存屏障分类粗分两种细分四种 什么叫保证有序性happens-before之volatile变量规则JMM就将内存屏障插入策略分为4种规则 volatile特性如何保证可见性说明例子volatile变量的读写过程 为何没有原子性例子…

软件测试“学历低”?10条人生逆袭建议

最近有粉丝私信问我“我学历低&#xff0c;投的简历屡屡石沉大海&#xff0c;不知道该怎么办&#xff1f;”之前也回答过其他人&#xff0c;今天把我的建议整理分享给大家。 学历是一块敲门砖&#xff0c;它会影响毕业以后的我们相当长一段时间&#xff0c;但并不是决定了我们…

fiddler抓包番外————了解工具栏

前言 作为一款功能强大的工具&#xff0c;Fiddler 提供了许多实用的功能和工具栏&#xff0c;可以帮助用户更加高效地使用它。 如果您想了解 Fiddler 的工具栏及其功能&#xff0c;那么本篇文章就是为您准备的。 在这里&#xff0c;我将为大家详细介绍 Fiddler 的工具栏及其…

Redis缓存预热、缓存穿透、缓存击穿、缓存雪崩,Redis布隆过滤器怎么实现?

目录 一、缓存预热1、缓存预热常见步骤2、代码实现 二、缓存雪崩1、什么情况会发生缓存雪崩&#xff1f;2、Redis缓存集群实现高可用3、如何避免Redis缓存雪崩&#xff1f; 三、缓存穿透1、什么情况会发生缓存穿透&#xff1f;2、如何避免Redis缓存穿透&#xff1f; 四、通过空…

Vue中如何实现轮播图、滑块选择器

Vue中如何进行滑动组件实现 在Vue应用中&#xff0c;滑动组件是一个常见的UI组件&#xff0c;例如轮播图、滑块选择器等等。本文将介绍如何使用Vue实现这些滑动组件。 轮播图 轮播图是一种常用的滑动组件&#xff0c;它通常用于展示多个图片或广告。在Vue中&#xff0c;我们可…

【人工智能里的数学】多元函数的微分学

【人工智能里的数学】多元函数的微分学 系列文章目录 【人工智能学习笔记】人工智能里的数学——概述 【人工智能里的数学】一元函数微分学 【人工智能里的数学】线性代数基础 【人工智能里的数学】多元函数微分学 文章目录 文章目录 系列文章目录文章目录偏导数高阶偏导数梯…

论文笔记--LIMA: Less Is More for Alignment

论文笔记--LIMA: Less Is More for Alignment 1. 文章简介2. 文章概括3 文章重点技术3.1 表面对齐假设(Superfacial Alignment Hypothesis)3.2 对齐数据3.3 训练 4 数值实验5. 文章亮点5. 原文传送门6. References 1. 文章简介 标题&#xff1a;LIMA: Less Is More for Alignm…

FTP协议分析(主动模式和被动模式)

今天本来计划分析下suricata中协议识别和解析的代码的&#xff0c;准备先从ftp协议开始看&#xff0c;不过看了一会儿代码后&#xff0c;还是觉得有必要对ftp协议的细节先熟悉熟悉。 目录 1、FTP环境搭建工具 2、FTP协议介绍 3、FTP文件操作命令列表 4、FTP请求码列表 5、…

硬件测试---相位噪声测试

一&#xff1a;相位噪声的概述 相位噪声是指信号或振荡器在频率上的相位变动或不稳定性。它是相对于理想稳定振荡器的相位偏离或波动的度量。相位噪声的存在意味着信号的相位在时间上会有微小的变化或扰动&#xff0c;这可能对某些应用产生负面影响。 相位噪声通常以相位噪声密…

【电子技术综合设计】数字钟(包含计数模块、12/24进制切换模块以及闹钟模块)

工程文件&#xff1a; https://pan.baidu.com/s/1PnYd2mwMUf0tgxczdcl2MA 提取码: ihrk B站演示&#xff1a; 【电子技术综合设计】数字电子时钟&#xff08;包含计数模块、12/24进制切换模块以及闹钟模块&#xff09;_哔哩哔哩_bilibili 一、设计要求 1. 24小时制的时、分…

基于Java汽车在线租赁管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

吴恩达老师《机器学习》课后习题2之逻辑回归(logistic_regression)

逻辑回归-线性可分 用于解决输出标签y为0或1的二元分类问题。判断邮件是否属于垃圾邮件&#xff1f;银行卡交易是否属于诈骗&#xff1f;肿瘤是否为良性&#xff1f;等等。 案例:根据学生的两门学生成绩&#xff0c;建立一个逻辑回归模型&#xff0c;预测该学生是否会被大学录…

一、深度学习引言

文章目录 一、机器学习中的关键组件1. 数据2. 模型3. 目标函数4. 算法 二、各种机器学习问题1. 有监督学习1.1 回归1.2 分类1.3 标记问题1.4 搜索1.5 推荐系统1.6 序列学习 2. 无监督学习3. 与环境互动4. 强化学习 三、深度学习的发展 一、机器学习中的关键组件 1. 数据 数据…

MM32F3273G8P火龙果开发板MindSDK开发教程17 -U8g2库的移植

MM32F3273G8P火龙果开发板MindSDK开发教程17 -U8g2 OLED库的移植 1、U8g2简介 手头正好有一块0.96寸的OLED屏&#xff0c;驱动芯片为ssd1306&#xff0c;心想怎么才能显示更为炫彩的图像。无意间&#xff0c;接触到U8g2图形库&#xff0c;遂决定将其移植到自己的工程中。 U8g…