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操作数据库,分为下面四步:
- 准备工作(创建springboot项目,准备数据库表,实体类)
- 引入MyBatis相关依赖,配置相关文件
- 编写代码(分为注解/XML两种)
- 测试
2.1 准备工作
2.2.1 创建springboot项目

导⼊ mybatis的起步依赖、mysql的驱动包。
导入mysql驱动包的原因是因为MyBatis是一种持久层框架,具体的数据存储和数据操作还是在mysql中,所以导入mysql驱动是必要的。
项目创建成功后,pom.xml文件中自动导入两个依赖。

当然也可以在maven仓库中找到相关依赖,手动添加。
如何在之前创建项目中添加这些依赖?
- 快捷键Alt+Insert,点击Edit Starters

- 点击OK

- 选择需要的依赖

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?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? MyBatis是一种持久层框架,用于简化JDBC的开…...
设计模式 -- 建造者模式(Builder Pattern)
这个模式以前也义Android-kotlin的场景下讲过 Android 用建造者模式模式写一个Dialog-CSDN博客 不过用的是 变种的建造者模式 建造者模式: 属于创建型模式 提供了一种创建对象的最佳方式, 使用多个简单的对象一步一步构建成一个复杂的对象 。 介绍 意图…...
如何下载 Apache + PHP + Mysql 集成安装环境并结合内网穿透工具实现公网访问内网服务
🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. WampServer下载安装二. WampServer启动三. 安装cpolar内网穿透3.1 注册账号…...
一招告别百度广告烦恼,同时效率提高100倍的几个常用搜索技巧!
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推荐--…...
文件上传 [ACTF2020 新生赛]Upload1
打开题目,发现是一道文件上传题目 随便上传个一句话木马上去 发现网站前端有白名单限制,只能上传含有jpg,png,gif的后缀文件 那我们便传个2.jpg的一句话木马上去,bp抓包 我们改成php文件后缀试试,发现重发…...
振南技术干货集:比萨斜塔要倒了,倾斜传感器快来!(1)
注解目录 1、倾斜传感器的那些基础干货 1.1 典型应用场景 (危楼、边坡、古建筑都是对倾斜敏感的。) 1.2 倾斜传感器的原理 1.2.1 滚珠式倾斜开关 1.2.2 加速度式倾斜传感器 1)直接输出倾角 2)加速度计算倾角 3)倾角精度的提高 (如果…...
手把手教你搭建属于自己的快递小程序
在数字化时代,小程序已经成为各行各业连接用户、提供服务、创造价值的重要工具。其中,快递寄件小程序因其实用性和广泛的需求,成为很多企业和开发者关注的焦点。本文将详细介绍如何快速创建快递寄件小程序,以及如何利用它实现盈利…...
C# Onnx LSTR 基于Transformer的端到端实时车道线检测
目录 效果 模型信息 项目 代码 下载 效果 端到端实时车道线检测 模型信息 lstr_360x640.onnx Inputs ------------------------- name:input_rgb tensor:Float[1, 3, 360, 640] name:input_mask tensor:Float[1, 1, 360, …...
Java相关编程思想
少用继承多用“组合”——在现有类的基础上组织一个新类。 2.继承要用“is”来检验,如果继承者is被继承者,说明这是一个比较好的继承。 3.向上造型,把实现方法留给继承者去实现。(动态绑定) 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 才过去仅仅一周时间,伴随着开发者大会上发布的一系列重磅升级和新特性,无疑这样的进化速度让广大网友炸锅了,其火热程度可见一斑。 就在四个小时前,OpenAI的CEO Sam Altma突然宣布,ChatGPT Plus账号暂停…...
Git目录不对,即当前文件夹不对应git仓库
报错信息是: fatal: not a git repository (or any of the parent directories): .git 如: 是当前文件夹不对应git仓库,一般在git clone之后,需要进入下一级文件夹才对应仓库。 在文件夹看,本层中没有.git文件夹&…...
Python基础:正则表达式(regular expression)详解
在Python中,正则表达式是一种强大的工具,可用于匹配和操作字符串。什么是正则表达式? 正则表达式是一种模式匹配语言,用于匹配字符串中的特定模式。这些模式可以是字母、数字、字符组合或其他符号。正则表达式通常用于文本处理、网…...
sqlmap requires ‘python-pymysql‘ third-party library
使用sqlmap进行udf提权报错: [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 一维数组的使用
一、原生数组: 1、Excel中: LIST_OneRange 项目1|项目2 2、生成的PY: LIST_OneRange [u项目1,u项目2] 3、脚本使用: :FOR ${Local_I} IN RANGE len(${OneRange}) ${value} Evaluate ${OneRange}[${Local_I}] …...
SpringCloud Alibaba组件入门全方面汇总(上):注册中心-nacos、负载均衡-ribbon、远程调用-feign
文章目录 NacosRibbonFeignFeign拓展 Nacos 概念:Nacos是阿里巴巴推出的一款新开源项目,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos致力于帮助用户发现、配置和管理微服务,它提供了一组简单易用的特性集&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空间的视野深度(Z值),这里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 测试 (1)创建实体类 User Data public class User {private Integer id;private String name;private String applicant;private String addre…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
