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…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...

解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...