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

MyBatis 操作数据库

文章目录

  • 1. 什么是MyBatis?
  • 2. 入门MyBatis
    • 2.1 准备工作
      • 2.2.1 创建springboot项目
      • 2.2.2 数据准备
    • 2.2 配置数据库连接
    • 2.3 写持久层代码
    • 2.4 单元测试
      • 2.4.1 web测试
      • 2.4.2 自动测试

1. 什么是MyBatis?

MyBatis是一种持久层框架,用于简化JDBC的开发。

持久层:指的就是持久化操作的层, 通常指数据访问层(dao), 是⽤来操作数据库的。 在这里插入图片描述

2. 入门MyBatis

MyBatis操作数据库,分为下面四步:

  1. 准备工作(创建springboot项目,准备数据库表,实体类)
  2. 引入MyBatis相关依赖,配置相关文件
  3. 编写代码(分为注解/XML两种)
  4. 测试

2.1 准备工作

2.2.1 创建springboot项目

这里是引用

导⼊ mybatis的起步依赖、mysql的驱动包。
导入mysql驱动包的原因是因为MyBatis是一种持久层框架,具体的数据存储和数据操作还是在mysql中,所以导入mysql驱动是必要的。
项目创建成功后,pom.xml文件中自动导入两个依赖。
在这里插入图片描述
当然也可以在maven仓库中找到相关依赖,手动添加。
如何在之前创建项目中添加这些依赖?

  1. 快捷键Alt+Insert,点击Edit Starters
    在这里插入图片描述
  2. 点击OK
    在这里插入图片描述
  3. 选择需要的依赖
    在这里插入图片描述

2.2.2 数据准备

MyBatis是操作数据库的,那么肯定需要有数据库了,可以在MySql中创建一个数据库,方便学习操作。

创建数据库,创建userinfo表,添加数据:

mysql> CREATE TABLE `userinfo` (-> `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,-> `username` VARCHAR ( 127 ) NOT NULL,-> `password` VARCHAR ( 127 ) NOT NULL,-> `age` TINYINT ( 4 ) NOT NULL,-> `gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-⼥ 0-默认',-> `phone` VARCHAR ( 15 ) DEFAULT NULL,-> `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',-> `create_time` DATETIME DEFAULT now(),-> `update_time` DATETIME DEFAULT now(),-> PRIMARY KEY ( `id` )-> ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
Query OK, 0 rows affected (0.02 sec)mysql> INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )-> VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )->  VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )-> VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )-> VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );
Query OK, 1 row affected (0.00 sec)
mysql> select * from userinfo;
+----+----------+----------+-----+--------+-------------+-------------+---------------------+---------------------+
| id | username | password | age | gender | phone       | delete_flag | create_time         | update_time         |
+----+----------+----------+-----+--------+-------------+-------------+---------------------+---------------------+
|  1 | admin    | admin    |  18 |      1 | 18612340001 |           0 | 2023-11-16 13:20:09 | 2023-11-16 13:20:09 |
|  2 | zhangsan | zhangsan |  18 |      1 | 18612340002 |           0 | 2023-11-16 13:20:22 | 2023-11-16 13:20:22 |
|  3 | lisi     | lisi     |  18 |      1 | 18612340003 |           0 | 2023-11-16 13:20:35 | 2023-11-16 13:20:35 |
|  4 | wangwu   | wangwu   |  18 |      1 | 18612340004 |           0 | 2023-11-16 13:20:52 | 2023-11-16 13:20:52 |
+----+----------+----------+-----+--------+-------------+-------------+---------------------+---------------------+
4 rows in set (0.00 sec)

创建实体类,userInfo.java:

package com.example.mybatisdemo.model;import lombok.Data;
import java.util.Date;
@Data
public class UserInfo {private Integer id;private String username;private String password;private Integer age;private Integer gender;private String phone;private Integer deleteFlag;private Date createTime;private Date updateTime;
}

2.2 配置数据库连接

配置application.yml⽂件, 配置内容如下:

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=falseusername: rootpassword: 131452driver-class-name: com.mysql.cj.jdbc.Driver

其中mybatis_test是要操作的数据库,username是用户名,一般都是root,password是你数据库的密码。
其他的一般不需要修改,使用时直接复制就行。
application.properties⽂件配置和yml相同,只是格式的区别。

2.3 写持久层代码

在这里插入图片描述
在项⽬中, 创建mapper包,包中创建持久层接⼝UserInfoMapper。
Mybatis的持久层接⼝规范⼀般都叫 XxxMapper,放在mapper包中,这是一种企业规范。
代码:

import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper
public interface UserInfoMapper {//查询所有⽤⼾@Select("select username, password, age, gender, phone from userinfo")public List<UserInfo> queryAllUser();
}

@Mapper注解:
表⽰是MyBatis中的Mapper接⼝,用于与MyBatis框架交互。
@Select注解:
代表的就是select查询,也就是注解对应⽅法的具体实现内容。

2.4 单元测试

2.4.1 web测试

如何验证上面代码成功运行呢?
可以使用web的方式,
在这里插入图片描述
在这里插入图片描述

2.4.2 自动测试

但是这种方法些许麻烦。
其实,在创建出来的SpringBoot⼯程中,在src下的test⽬录下,已经⾃动帮我们创建好了测试类 ,我们可以直接使⽤这个测试类来进⾏测试。
在需要测试的接口中,使用快捷键Alt+Insert,点击Test:
在这里插入图片描述
勾选要测试的方法,点击OK,⽤Idea⾃动⽣成测试类:
在这里插入图片描述
编写测试代码:

@Slf4j
@SpringBootTest
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;@Testvoid queryAllUser() {List<UserInfo> list = userInfoMapper.queryAllUser();log.info(list.toString());}
}

运行结果:
在这里插入图片描述
@SpringBootTest 注解:
是 Spring Boot 提供的一个注解,用于在 Spring Boot 应用中启动一个完整的测试环境。
@Slf4j 注解:
是Lombok提供的一种注解,用于打印日志。

相关文章:

MyBatis 操作数据库

文章目录 1. 什么是MyBatis&#xff1f;2. 入门MyBatis2.1 准备工作2.2.1 创建springboot项目2.2.2 数据准备 2.2 配置数据库连接2.3 写持久层代码2.4 单元测试2.4.1 web测试2.4.2 自动测试 1. 什么是MyBatis&#xff1f; MyBatis是一种持久层框架&#xff0c;用于简化JDBC的开…...

设计模式 -- 建造者模式(Builder Pattern)

这个模式以前也义Android-kotlin的场景下讲过 Android 用建造者模式模式写一个Dialog-CSDN博客 不过用的是 变种的建造者模式 建造者模式&#xff1a; 属于创建型模式 提供了一种创建对象的最佳方式&#xff0c; 使用多个简单的对象一步一步构建成一个复杂的对象 。 介绍 意图…...

如何下载 Apache + PHP + Mysql 集成安装环境并结合内网穿透工具实现公网访问内网服务

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. WampServer下载安装二. WampServer启动三. 安装cpolar内网穿透3.1 注册账号…...

一招告别百度广告烦恼,同时效率提高100倍的几个常用搜索技巧!

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…...

文件上传 [ACTF2020 新生赛]Upload1

打开题目&#xff0c;发现是一道文件上传题目 随便上传个一句话木马上去 发现网站前端有白名单限制&#xff0c;只能上传含有jpg&#xff0c;png&#xff0c;gif的后缀文件 那我们便传个2.jpg的一句话木马上去&#xff0c;bp抓包 我们改成php文件后缀试试&#xff0c;发现重发…...

振南技术干货集:比萨斜塔要倒了,倾斜传感器快来!(1)

注解目录 1、倾斜传感器的那些基础干货 1.1 典型应用场景 &#xff08;危楼、边坡、古建筑都是对倾斜敏感的。&#xff09; 1.2 倾斜传感器的原理 1.2.1 滚珠式倾斜开关 1.2.2 加速度式倾斜传感器 1)直接输出倾角 2)加速度计算倾角 3)倾角精度的提高 &#xff08;如果…...

手把手教你搭建属于自己的快递小程序

在数字化时代&#xff0c;小程序已经成为各行各业连接用户、提供服务、创造价值的重要工具。其中&#xff0c;快递寄件小程序因其实用性和广泛的需求&#xff0c;成为很多企业和开发者关注的焦点。本文将详细介绍如何快速创建快递寄件小程序&#xff0c;以及如何利用它实现盈利…...

C# Onnx LSTR 基于Transformer的端到端实时车道线检测

目录 效果 模型信息 项目 代码 下载 效果 端到端实时车道线检测 模型信息 lstr_360x640.onnx Inputs ------------------------- name&#xff1a;input_rgb tensor&#xff1a;Float[1, 3, 360, 640] name&#xff1a;input_mask tensor&#xff1a;Float[1, 1, 360, …...

Java相关编程思想

少用继承多用“组合”——在现有类的基础上组织一个新类。 2.继承要用“is”来检验&#xff0c;如果继承者is被继承者&#xff0c;说明这是一个比较好的继承。 3.向上造型&#xff0c;把实现方法留给继承者去实现。&#xff08;动态绑定&#xff09; 4.把接口理解为抽象类的进一…...

Hadoop-HDFS架构与设计

HDFS架构与设计 一、背景和起源二、HDFS概述1.设计原则1.1 硬件错误1.2 流水访问1.3 海量数据1.4 简单一致性模型1.5 移动计算而不是移动数据1.6 平台兼容性 2.HDFS适用场景3.HDFS不适用场景 三、HDFS架构图1.架构图2.Namenode3.Datanode 四、HDFS数据存储1.数据块存储2.副本机…...

OpenAI暂停新的ChatGPT Plus注册 | OpenAI 的 GPT Builder 创建您的 GPTs

OpenAI DevDay 才过去仅仅一周时间&#xff0c;伴随着开发者大会上发布的一系列重磅升级和新特性&#xff0c;无疑这样的进化速度让广大网友炸锅了&#xff0c;其火热程度可见一斑。 就在四个小时前&#xff0c;OpenAI的CEO Sam Altma突然宣布&#xff0c;ChatGPT Plus账号暂停…...

Git目录不对,即当前文件夹不对应git仓库

报错信息是&#xff1a; fatal: not a git repository (or any of the parent directories): .git 如&#xff1a; 是当前文件夹不对应git仓库&#xff0c;一般在git clone之后&#xff0c;需要进入下一级文件夹才对应仓库。 在文件夹看&#xff0c;本层中没有.git文件夹&…...

Python基础:正则表达式(regular expression)详解

在Python中&#xff0c;正则表达式是一种强大的工具&#xff0c;可用于匹配和操作字符串。什么是正则表达式&#xff1f; 正则表达式是一种模式匹配语言&#xff0c;用于匹配字符串中的特定模式。这些模式可以是字母、数字、字符组合或其他符号。正则表达式通常用于文本处理、网…...

sqlmap requires ‘python-pymysql‘ third-party library

使用sqlmap进行udf提权报错&#xff1a; [14:06:04] [CRITICAL] sqlmap requires python-pymysql third-party library in order to directly connect to the DBMS MySQL. You can download it from https://github.com/PyMySQL/PyMySQL. Alternative is to use a package pyt…...

05 robotFrameWork+selenium2library 一维数组的使用

一、原生数组&#xff1a; 1、Excel中&#xff1a; LIST_OneRange 项目1|项目2 2、生成的PY&#xff1a; LIST_OneRange [u项目1,u项目2] 3、脚本使用&#xff1a; :FOR ${Local_I} IN RANGE len(${OneRange}) ${value} Evaluate ${OneRange}[${Local_I}] …...

SpringCloud Alibaba组件入门全方面汇总(上):注册中心-nacos、负载均衡-ribbon、远程调用-feign

文章目录 NacosRibbonFeignFeign拓展 Nacos 概念&#xff1a;Nacos是阿里巴巴推出的一款新开源项目&#xff0c;它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos致力于帮助用户发现、配置和管理微服务&#xff0c;它提供了一组简单易用的特性集&am…...

Zabbix钉钉机器人告警

目录 一.在钉钉群里添加机器人 二.配置钉钉告警脚本 1.安装python依赖模块python-requests 2.配置钉钉告警配置脚本zabbix_ding.conf 3.创建告警日志并且授权。 4.配置钉钉告警执行脚本dingding.py 5.测试 三.配置zabbix告警 1.创建媒介 2.给用户添加报警媒介 3.配置…...

unity shaderGraph实例-扫描效果

文章目录 效果展示整体结构各区域内容区域1区域2区域3区域4区域5区域6GraphSetttings注意事项使用方法 效果展示 整体结构 各区域内容 区域1 用场景深度减去顶点的View空间的视野深度&#xff08;Z值&#xff09;&#xff0c;这里Z值需要乘-1是因为从相机看到的物体顶点的视野…...

AW2013芯片讲解

文章目录 前言一、AW2013芯片介绍二、AW2013从机地址三、AW2013读写时序AW2013写时序AW2013读时序 四、AW2013的INT引脚五、LED作用和配置描述LED控制PWM控制模式简短编程模式 六、AW2013寄存器讲解总结 前言 本篇文章将带大家学习AW2013芯片的使用。 一、AW2013芯片介绍 AW…...

Spring JdbcTemplate Junit 测试 - ResultSetExtractor/RowMapper

Spring JdbcTemplate Junit 测试覆盖率 - 以 ResultSetExtractor / RowMapper 为例 1、RowMapper Mockito 测试 &#xff08;1&#xff09;创建实体类 User Data public class User {private Integer id;private String name;private String applicant;private String addre…...

RabbitMQ实战

文章目录 1、简介2、MQ优点缺点MQ的应用场景AMQP工作原理市面上常见的MQ 3、Linux安装RabbitMQ3.1 版本对应3.2 安装socat3.3 下载 Erlang/OTP、安装、验证 erlang方法一&#xff1a;1. 下载2. 将下载的Erlang服务上传到服务器上面3. 解压4. 编译erlang的依赖环境5. 安装Erlang…...

UI游戏设计模板大放送:7种别具匠心的创意!

随着游戏产业的快速发展&#xff0c;UI游戏设计已经成为一个热门的设计行业&#xff0c;但与之前的设计相比&#xff0c;UI游戏设计还是比较特殊的&#xff0c;主要体现在UI游戏设计难度大&#xff0c;需要大量的手绘内容和对游戏玩法的理解上。这些门槛需要大量的时间去学习&a…...

酷开系统 酷开科技,将家庭娱乐推向新高潮

在当今数字化时代&#xff0c;家庭娱乐已经成为人们日常生活中不可或缺的一部分。如果你厌倦了传统的家庭娱乐方式&#xff0c;想要一种全新的、充满惊喜的娱乐体验&#xff0c;那么&#xff0c;不妨进入到酷开科技的世界&#xff0c;作为智能电视行业领军企业&#xff0c;酷开…...

我精心制作的 python 一小时极简课程来了 ≧◠◡◠≦ 免安装程序+精简核心概念

我精心制作的 python 一小时极简课程来了 ≧◠◡◠≦ 免安装程序+精简核心概念 用过我的软件的朋友应该知道,目前我发布的所有的软件都是 python 写的,例如: 发票批量识别软件点云格式转换软件亲人微信消息记录提取软件批量 WORD-MD 文档中英翻译软件批量 TXT 文本转音频软件…...

220V交流转直流的简易电源设计

220V交流转直流的简易电源设计 设计简介设计原理电路图变压器电路交流转直流电路3.3V电源接口电路 PCB3D图 实践检验 设计简介 通过模拟电路的相关知识&#xff0c;尝试将220V的交流电转化为我们指定电压的直流电。 设计原理 将220V交流电转化为直流电的方法常用的有通过变压器…...

使用Nginx和uwsgi在自己的服务器上部署python的flask项目

Nginx 是一个高性能的 HTTP 和反向代理服务。其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力在同类型的网页服务器中表现较好。 Nginx 专为性能优化而开发&#xff0c;性能是其最重要的考量指标&#xff0c;实现上非常注重效率&#xff0c;能经受…...

【Windows 开发环境配置——NVIDIA 篇】CUDA、cuDNN、TensorRT 三件套安装

CUDA 从CUDA Toolkit Archive下载相应版本的离线安装包&#xff0c;这里以11.7为例。 打开安装包&#xff0c;在安装选项选择自定义模式&#xff0c;点击下一步。 在自定义安装选项中&#xff0c;仅选择CUDA组件&#xff08;其中Nsight相关组件用于代码调试与性能分析&#xff…...

【C++】【Opencv】cv::GaussianBlur、cv::filter2D()函数详解和示例

本文通过函数详解和运行示例对cv::GaussianBlur和cv::filter2D()两个函数进行解读&#xff0c;最后综合了两个函数的关系和区别&#xff0c;以帮助大家理解和使用。 目录 cv::GaussianBlur&#xff08;&#xff09;函数详解运行示例 filter2D()函数详解运行示例 总结两个函数联…...

【数据分享】1961—2022年全国范围的逐日降水栅格数据

降水数据是我们在各项研究中最常用的气象指标之一&#xff01;之前我们给大家分享过来源于国家青藏高原科学数据中心发布的1901-2022年1km分辨率逐月降水栅格数据以及1901-2022年1km分辨率逐年降水栅格数据&#xff08;均可戳我跳转&#xff09;&#xff01;很多小伙伴拿到数据…...

[Linux] 网络文件共享服务

一、存储类型 存储类型可分为三类&#xff1a;DAS&#xff08;直连式存储&#xff09;,NAS&#xff08;网络附加存储&#xff09;,SAN&#xff08;存储区域网络&#xff09;。 1.1 DAS 定义&#xff1a; DAS是指直连存储&#xff0c;即直连存储&#xff0c;可以理解为本地文…...