【JavaEE】懒人的福音-MyBatis框架—介绍、搭建环境以及初步感受

【JavaEE】MyBatis框架要点总结(1)

在这里插入图片描述

文章目录

  • 【JavaEE】MyBatis框架要点总结(1)
    • 1. MyBatis是什么?
    • 2. 搭建MyBatis的开发环境
      • 2.0 MySQL建库建表
      • 2.1 新项目添加MyBatis框架
      • 2.2 设置MyBatis的配置
        • 2.2.1 设置数据库的连接信息
        • 2.2.2 设置xml的保存路径和命名格式
        • 2.2.3 有其他配置
    • 3. 根据MyBatis的写法完成数据库的操作
      • 3.1 创建一个接口
      • 3.2 实体类UserInfo
      • 3.3 接口中声明方法
      • 3.4 在对应的路径下创建xml
      • 3.5 在xml中实现方法
      • 3.6 检验是否成功
    • 4. 推荐的插件MyBatisX

【JavaEE】MyBatis框架要点总结(1)

在之前Spring相关框架的学习中,我们已经知道了如何进行前后端交互信息了,而现在MyBatis的歇息,就是将重要数据进行存储,以及将重要数据从数据库中获取

在之前的网站开发的时候,数据持久化层DAO的重要作用,咱们也能感受得到,这里不进行多的论述

  1. 前端的一次提交携带的数据,大多数只是数据库的表的一行罢了,而这段数据要保存起来,否则本次提交仅当前页面有效
    • 例如,提交用户信息,提交博客信息,删除和修改博客…
    • 补充:session存储就不讲了,直接讲数据库存储
  2. 后端返回的数据可能需要通过数据库来判断,或者返回数据库的数据
    • 例如,登录检验,博客列表…
  3. 此外,还有删除的修改的操作,也需要进行数据库操作…

1. MyBatis是什么?

MyBatis ORM

  • Object Relation Mapping
  • 即,对象关系映射框架

在这里插入图片描述

  1. MyBatis是一个优秀的 持久层框架 ,它支持自定义SQL、存储过程以及高级映射…
  2. MyBatis,基于JDBC实现,但是 极大地简化 了之前JDBC等的很多繁琐的操作
    • JDBC代码以及设置参数和获取结果集的工作
    • 之前JDBC多麻烦,不用我说了吧,传送门:【JavaEE】表白墙再升级(MySQL实现持久化)_s:103的博客-CSDN博客
    • 这也是要学习 MyBatis 的原因!
  3. MyBatis可以通过简单的XML或者注解来配置和映射原始类型、接口和Javc POJO(Plan Old Java Objects,普通老式java对象)为数据库中的记录

也就是说,MyBatis是更简单完成程序和数据库交互的工具框架,用它去增删改查数据库,更加便捷

mybatis – MyBatis 3 | 简介

  • 这是官网,可以自行去查阅和学习
  • 同样的,并不是只有本文讲的这些方式而已,还有更多更多…并且还可以实现很多很多,开发时需要用到的内容就去学即可!👍

而MyBatis的学习分为两步:

  1. 搭建MyBatis的开发环境
  2. 使用MyBatis模式和语法操作数据库

2. 搭建MyBatis的开发环境

在这里插入图片描述

2.0 MySQL建库建表

虽然后端代码可以建库建表,但是一般是不会在后端建库建表的

因为前后端约定接口的时候,有哪些数据库和有哪些表都是确定下来的,直接创建即可,在后端进行判定是否存在来进行创建是没有必要的~

这里我建立一个数据库做测试用:

在这里插入图片描述

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

接下来就是一些表和一些数据了,这里我就直接用之后JavaEE进阶版本的博客系统需要用到的表和数据了~

  • 放在.sql文件里面
    1. 方便编辑,不易出错
    2. 方便后期查看和重复使用

代码地址:test.sql · 游离态/马拉圈2023年8月 - 码云 - 开源中国 (gitee.com)

在这里插入图片描述

  • 直接粘贴进去~

在这里插入图片描述

OK~

在这里插入图片描述

后面的操作针对用户表userinfo:

在这里插入图片描述

2.1 新项目添加MyBatis框架

创建时勾选MyBatis框架依赖:

在这里插入图片描述

MyBatis操作什么数据库呢?

  • MySQL Driver,联系MySQL的依赖

在这里插入图片描述

也就是MySQL的JDBC依赖,这样,这个项目MyBatis就是针对MySQL JDBC的了

在这里插入图片描述

耐心等待~

在这里插入图片描述

在这里插入图片描述

如果你觉得这两个原本红色不舒服,可以ctrl 选中两个文件,然后添加到Git里:
在这里插入图片描述

这样就是绿的~

2.2 设置MyBatis的配置

在这里插入图片描述

直接运行项目,会报错~

这是因为加入MySQL Driver后, 没有告知项目是哪个数据源 ,也就是哪个具体的数据库服务器的那一个数据库

  1. 网络上别的地方的某个数据库
  2. 本地的某个数据库

这时的

  • “保存一个用户信息,id为1,username为小马”没告知数据库,
  • 就等同于“叫一份外卖,来一碗螺蛳粉”没告知取货地址一样~

错误信息也差不多那个意思:

在这里插入图片描述

2.2.1 设置数据库的连接信息

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test_db?characterEncoding=utf8
# MyBatis 基于jdbc实现~ 底层用的就是jdbc:mysql协议,这个地址是本地数据库的地址,test_db就是我们的那个数据库
spring.datasource.username=root
# 用户名,默认固定是root
spring.datasource.password=mmsszsd666
# 密码,是数据库的密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 固定写法,

2.2.2 设置xml的保存路径和命名格式

这些xml文件有什么用具体有什么用后面说,先设置他们在哪和叫什么就行,这样MyBatis框架就能找到它们~
在这里插入图片描述

  • 这个目录要自己去创建,叫啥都ok

在这里插入图片描述

*Mapper代表的是任意长度的字符串,并且以Mapper.xml结尾

  • 即xxxMapper.xml

2.2.3 有其他配置

可参考:SSM常用配置.txt · 游离态/马拉圈2023年8月 - 码云 - 开源中国 (gitee.com)

  • 很多,感兴趣的或者有需要的可以去官方了解一下,这里有个推荐的

例如配置,执行SQL语句时,打印SQL相关日志

在这里插入图片描述

建议这些常用的配置写在自己的git里面的代码片段里,方便查看

3. 根据MyBatis的写法完成数据库的操作

本文就演示一次基本写法,下一篇文章讲解更多细节以及【增删改查CRUD】各个操作~

常规的写法,包含两个文件:

  1. 接口:方法的声明(给Service调用)
  2. XML:实现接口

实现一个查询的操作:

在这里插入图片描述

3.1 创建一个接口

数据持久层的包名叫mapper(映射器,映射工具),MyBatis的动作是mapping嘛~

在这里插入图片描述

而这个注解也不是普通的接口,我们要用一个注解修饰:

  • 并不是@Repository,而是一个新的注解@Mapper
  • @Repository下线了✿✿ヽ(°▽°)ノ✿

在这里插入图片描述

@Mapper就是数据持久层的标志~

在这里插入图片描述

3.2 实体类UserInfo

补充:数据库表的实体类定义在model里

  • 数据库的数据,以model里面的类作为载体

在这里插入图片描述

在这里插入图片描述

3.3 接口中声明方法

有了实体类后,就可以在接口里声明方法了~

在这里插入图片描述

3.4 在对应的路径下创建xml

  1. 位置在之前创建的目录下
    1. resources.mybatis
  2. 名字要起之前规定的命名方式!
    • *Mapper.xml

至于这个*可以是任何正常的字符串来命名,因为这个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">
<mapper namespace="com.example.demo.mapper.UserMapper"></mapper>
  • 直接复制这个模板就行了~
    • 建议保存在代码片段,方便后期查找

mapper属性namespace的值就是对应我们的接口的呀

在这里插入图片描述

3.5 在xml中实现方法

这里用到select标签

  1. 属性id

    • 代表重写的方法名
  2. 另一个属性,你甭管是什么,下节课讲细节,你就看好了~

    • 设置resultType属性为一个类,也就是我们返回的类,这里不是List,而是其泛型,也就是实体类,因为实体类才是其核心,如果结果有多个,自然是集合List
  3. 标签的内部就是执行的sql语句

<select id="getAll" resultType="com.example.demo.model.UserInfo">select * from userinfo
</select>

这样写就代表了,重写getAll方法为从配置文件中的数据库里的【表userinfo】中查询sql语句后的结果打包成UserInfo集合返回

3.6 检验是否成功

一般数据持久层是service层调用的,所以创建一个service包,一个TestService类:
在这里插入图片描述

通过属性注入的获得userMapper接口对象

  • 这个时候,这个接口对象的getAll方法已经被重写了(根据那个xml)

调用userMapper的getAll方法~

根据Spring MVC的原理,只有controller层能与接受请求,返回响应,你也发现了只有@RestController没有其他的@RequestService…
在这里插入图片描述

  • 属性注入获取对应的TestService的Bean对象

调用testService的getAll方法~

  • 在这里你就可能感受到了Spring从系统拿对象的特性了,还有“套娃”…

浏览器访问效果:

在这里插入图片描述

  • List对象返回的json字符串一定带[ ]的,无论List里面有0个数据还是1个数据还是多少个数据~

IDEA控制台:

  • 设置了执行sql就打印相关日志

在这里插入图片描述

数据库表的内容:

在这里插入图片描述

是不是很方便😀😀😀

  • 下一篇文章,就是讲解为什么会这样,逻辑是咋样的,一些细节,以及其他的操作的实现!

4. 推荐的插件MyBatisX

一旦项目大了,mapper里的接口会变多,相应的xml文件也会变多,谁绑定了谁找起来也挺麻烦的

  1. 如果是xml到mapper,那就比较简单,直接Ctrl点击跳转:

在这里插入图片描述

  1. 但是如果是mapper到xml,则不能跳转,得一个个去找~

在这里插入图片描述

  • 没有绑定xml的信息~

现在有一个插件,MyBatisX:

在这里插入图片描述

安装后,mapper的旁边就会出现一只蓝巾鸟,xml文件旁边就会出现一只红巾鸟

在这里插入图片描述

而在代码里,mapper代码的左边栏是一只红巾鸟,xml代码的左边栏则是一只蓝巾鸟

  • 当然不会影响打断点~

在mapper代码中点击红巾鸟图案,代表mapper的蓝巾鸟就会去找这只鸟,也就是xml文件,反之,xml中点击鸟图案,就去找另一只鸟,也就是mapper接口

在这里插入图片描述

这样就可以快速找到对应的xml和接口了!


文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

在接下来的MyBatis文章中,将会有更深入的讲解!

代码位置:mybatis_demo/src/main · 游离态/马拉圈2023年8月 - 码云 - 开源中国 (gitee.com)


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

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

相关文章

U8g2 驱动oled自定义中文字库

原文&#xff1a;Arduino驱动LED128X64 - U8g2 参考&#xff1a; Arduino通过u8g2库驱动OLED适合 u8g2 的中文字体&#xff0c;采用文泉驿点阵宋体作为源本&#xff0c;提供 12x12、13x13、14x14、15x15 和 16x16 点阵字库。 本文所需工具下载 我们在项目中大概率会遇到LED显示…

Unity3d C#利用本地网页快速打开萤石云监控视频流(ezopen)实现云台,声音等控制,支持WebGL平台,替代UMP播放(含源码)

前言 之前我介绍了替代Universal?Media?PlayerUMP播放石云监控视频流(ezopen)的功能&#xff0c;效果还是很明显的&#xff0c;笔者的测试是差不多3-5秒就能打开监控画面&#xff0c;不过稍微遗憾的是&#xff0c;之前的功能是iframe打开石云提供的播放网页的形式&#xff0…

在linux系统上部署Nginx

一、准备环境 1、关闭防火墙 systemctl disable firewalld.service 2、 安装Nginx相关依赖 yum install -y gcc-c zlib zlib-developenssl openssl-devel pcre pcre-devel 二、源码安装 1、上传压缩包并解压到目标文件 cd /usr/local tar -zxvf nginx-1.22.0.tar.gz 2、…

06-4_Qt 5.9 C++开发指南_MDI应用程序设计

文章目录 1. MDI简介2. 文档窗口类 QFormDoc 的设计3. MDI主窗口设计与子窗口的使用3.1 主窗口界面设计3.2 MDI子窗口的创建与加入3.3 QMdiArea 常用功能函数3.4 MDI的信号 4. 源码4.1 qwmainwindow.h4.2 qwmainwindow.cpp 1. MDI简介 传统的应用程序设计中有多文档界面(Multi…

企业权限管理(六)-订单详情

订单详情查询 跳转到订单详情页面orders-show.jsp <button type"button" class"btn bg-olive btn-xs" onclick"location.href${pageContext.request.contextPath}/orders/findById.do?id${orders.id}">详情</button>OrdersControl…

北美跨境购物商城多语言多货币系统快捷搭建(java开源)

我了解到您想搭建一个北美跨境购物商城&#xff0c;拥有多语言和多货币系统&#xff0c;并且希望使用Java开源技术进行快速搭建。以下是一个基本的搭建步骤&#xff1a; 1.确定需求&#xff1a;首先确定您的商城需求&#xff0c;包括功能、设计和用户体验等方面。确保您清楚地…

进入现代云技术的世界-APIGateway、ServiceMesh、OpenStack、异步化框架、云原生框架、命令式API与声明式API

目录 APIGateway Service Mesh OpenStack 异步化框架 云原生框架 命令式API与声明式API APIGateway API网关&#xff08;API Gateway&#xff09;是一个服务器——充当了客户端和内部服务之间的中间层。API网关负责处理API请求&#xff0c;将客户端的请求路由到相应的后端…

数据挖掘全流程解析

数据挖掘全流程解析 数据指标选择 在这一阶段&#xff0c;使用直方图和柱状图的方式对数据进行分析&#xff0c;观察什么数据属性对于因变量会产生更加明显的结果。 如何绘制直方图和条形统计图 数据清洗 观察数据是否存在数据缺失或者离群点的情况。 数据异常的两种情况…

webpack基础知识八:说说如何借助webpack来优化前端性能?

一、背景 随着前端的项目逐渐扩大&#xff0c;必然会带来的一个问题就是性能 尤其在大型复杂的项目中&#xff0c;前端业务可能因为一个小小的数据依赖&#xff0c;导致整个页面卡顿甚至奔溃 一般项目在完成后&#xff0c;会通过webpack进行打包&#xff0c;利用webpack对前…

leetcode 33.搜索旋转排序数组

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;搜索旋转排序数组 ps&#xff1a; 本题是二分查找的变形&#xff0c;旋转排序数组之后其实会形成两个有序的区间。算出平均下标先判断是否与 target 相等&#xff0c;因为这样可以减少代码的冗余。如果前者不成立则使用平…

Godot 4 源码分析 - 文件读入编码处理

今天需要读入xml文件进行处理&#xff0c;结果读入一个带中文的文件时&#xff0c;出错了。当然程序还能运行&#xff0c;但编译器一直报错&#xff0c;而且XML解析也不正确 单步调试发现读入的内容出现乱码&#xff0c;具体逻辑&#xff1a; String FileAccess::get_as_text…

【肌电图信号分析】通道肌电图并查找收缩周期的数量、振幅、最大值和持续时间(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

React源码解析18(2)------ FilberNode,FilberRootNode结构关系

摘要 在上一篇&#xff0c;我们实现了通过JSX转换为ReactElement的方法&#xff0c;也看到了转换后React元素的结构。但是这个React元素&#xff0c;并不能很清楚的表达组件之间的关系&#xff0c;以及属性的处理。 所以在React内部&#xff0c;会将所有的React元素转换为Fil…

【Linux】详解进程状态之僵尸进程——孤儿进程

目录 &#x1f31e;专栏导读 &#x1f31b;什么是进程 ⭐什么是PCB&#xff1f; &#x1f31b;查看进程 &#x1f31b;如何通过系统调用查看进程PID &#x1f31b;fork &#x1f31e;认识进程状态 &#x1f31b;查看进程状态 &#x1f31b;R状态 ⭐例如&#xff1a…

VMware Workstation及CentOS-7虚机安装

创建新的虚机&#xff1a; 选择安装软件&#xff08;这里选的是桌面版&#xff0c;也可以根据实际情况进行选择&#xff09; 等待检查软件依赖关系 选择安装位置&#xff0c;自主配置分区 ​​​​​​​ 创建一个普通用户 安装完成后重启 点击完成配置&#xff0c;进入登陆界面…

怎么进行流程图制作?用这个工具制作很方便

怎么进行流程图制作&#xff1f;流程图是一种非常有用的工具&#xff0c;可以帮助我们更好地理解和展示各种复杂的业务流程和工作流程。它可以将复杂的过程简化为易于理解的图形和文本&#xff0c;使得人们更容易理解和跟踪整个流程。因此&#xff0c;制作流程图是在日常工作中…

拆解与重构:慕云游首页组件化设计

目录 前言1 项目准备1.1 创建项目目录1.2 搭建项目开发环境 2 项目组件化2.1 在当前环境启动原有项目2.2 顶部组件2.3 幻灯片组件2.3.1 功能实现2.3.2 加载中组件2.3.3 结构和样式2.3.4 使用Ajax获取数据 2.4 机酒自由行组件2.5 拆分余下的css文件 3 项目完善4 源码 前言 在现代…

如何使Python Docker镜像安全、快速、小巧

一、说明 在微服务领域&#xff0c;拥有安全、高效和紧凑的 Docker 映像对于成功部署至关重要。本博客将探讨有助于构建此类映像的关键因素&#xff0c;包括不以 root 用户身份运行映像的重要性、在构建映像时更新和升级包、在编写 Dockerfile 指令时考虑 Docker 的层架构&…

岩土工程仪器多通道振弦传感器信号转换器应用于桥梁安全监测

岩土工程仪器多通道振弦传感器信号转换器应用于桥梁安全监测 桥梁作为交通运输的重要节点&#xff0c;其安全性一直备受关注。不同于其他建筑物&#xff0c;桥梁所处的环境复杂多变&#xff0c;同时&#xff0c;其所需承受的负荷也相对较大&#xff0c;这就需要对桥梁的安全进…

Windows 安装 pandoc 将 jupyter 导出 pdf 文件

Windows 安装 pandoc 将 jupyter 导出 pdf 文件 1. 下载 pandoc 安装文件2. 安装 pandoc3. 安装 nbconvert4. 使用 pandoc 1. 下载 pandoc 安装文件 访问 https://github.com/jgm/pandoc/releases&#xff0c;下载最新版安装文件&#xff0c;例如&#xff0c;3.1.6.1 版&#…