当前位置: 首页 > 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…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...