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

MyBatis 查询数据库之二(增、删、改、查操作)

目录

1. 配置打印 MyBatis 执行的SQL

2. 查询操作

2.1 通过用户 ID 查询用户信息、查询所有用户信息

(1) Mapper 接口

(2)UserMapper.xml 查询所有用户的具体实现 SQL

(3)进行单元测试

3. 增加操作

3.1 在 mapper(interface)里面添加增加方法的声明

3.2 在 XMl 中添加 标签和增加的 sql 代码

3.3 生成测试类

 4.修改操作

4.1 在 mapper(interface)里面添加修改方法的声明

4.2 在 XMl 中添加 标签和修改的 sql 代码

4.3 生成测试类

 5. 删除操作

5.1 在 mapper(interface)里面添加删除方法的声明

5.2 在 XMl 中添加 标签和删除的 sql 代码

5.3 生成测试类


1. 配置打印 MyBatis 执行的SQL

#mybatis 中 xml 保存路径
mybatis:mapper-locations:- classpath:mybatis/**Mapper.xmlconfiguration: # 配置打印 MyBatis 执行的 SQLlog-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 配置打印 MyBatis 执行的 SQL
logging:level:com:example:demo: debug

可以看出MyBatis的底层就是JDBC,最终还是会生成JDBC的,只是MyBatis帮我们去执行了 

2. 查询操作

2.1 通过用户 ID 查询用户信息、查询所有用户信息

(1) Mapper 接口

@Mapper// 和五大类注解是一样的
public interface UserMapper {/*** 根据用户 id 查询用户信息* @param id* @return*/Userinfo getUserById(@Param("id") Integer id);/*** 查询全部* @return*/List<Userinfo> getAllUser();
}

(2)UserMapper.xml 查询所有用户的具体实现 SQL

<?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.ssmdemo1.mapper.UserMapper"><select id="getUserById" resultType="com.example.ssmdemo1.entity.Userinfo">select * from userinfo where id=#{id}</select><select id="getAll" resultType="com.example.ssmdemo1.entity.Userinfo">select * from userinfo</select>
</mapper>

(3)进行单元测试

 

单元测试知识点击此处

添加单元测试业务逻辑 

@SpringBootTest// 1.表明当前单元测试是运行在Spring Boot环境中的
@Transactional // 开启一个事务,执行完恢复数据
class UserMapperTest {@Autowired// 2.注入测试对象:属性注入private UserMapper userMapper;@Test
//    @Transactionalvoid getUserById() {// 3.添加单元测试的业务代码Userinfo userinfo = userMapper.getUserById(1);System.out.println(userinfo);Assertions.assertEquals("admin",userinfo.getUsername());}@Testvoid getAllUser() {List<Userinfo> list = userMapper.getAllUser();Assertions.assertEquals(1,list.size());}
}

3. 增加操作

3.1 在 mapper(interface)里面添加增加方法的声明

/*** 添加操作* @return*/int add(Userinfo userinfo);

3.2 在 XMl 中添加 标签和增加的 sql 代码

在这里我们传的是个对象,该怎么写呢?

是不是需要对象打点呢,不需要,直接去写对象的具体的属性就行了

<!--    只能得到受影响的行数--><insert id="add">insert into userinfo (username,password,createtime,updatetime)values(#{username},#{password},#{createtime},#{updatetime})</insert>

注意:insert 操作只能得到受影响的行数,所以不需要添加resultType

3.3 生成测试类

@SpringBootTest// 1.表明当前单元测试是运行在Spring Boot环境中的
@Transactional // 开启一个事务,执行完恢复数据
class UserMapperTest {@Autowired// 2.注入测试对象:属性注入private UserMapper userMapper;@Testvoid add() {// 伪代码,构建对象并设置相应的值Userinfo userinfo = new Userinfo();userinfo.setUsername("李四");userinfo.setPassword("123456");userinfo.setCreatetime(LocalDateTime.now());userinfo.setUpdatetime(LocalDateTime.now());// 调用MyBatis 添加方法执行添加操作int resule = userMapper.add(userinfo);int uid = userinfo.getId();System.out.println("user2的ID = " + uid);Assertions.assertEquals(1,resule);}

在这里我抱着试一试的想法去看能不能得到用户的id

可以看见用这个方法是拿不到的

 4.修改操作

4.1 在 mapper(interface)里面添加修改方法的声明

@Mapper
public interface UserMapper {/*** 修改用户*/int updateUserName(Userinfo userinfo);
}

4.2 在 XMl 中添加 标签和修改的 sql 代码

<!--    默认返回受影响的行数--><update id="updateUserName">update userinfo set username=#{username} where id=#{id}</update>

4.3 生成测试类

 @Testvoid updateUserName() {// 伪代码,构建测试数据Userinfo userinfo = new Userinfo();userinfo.setId(5);// 修改id为5的用户userinfo.setUsername("老五");int result = userMapper.updateUserName(userinfo);System.out.println("修改:" + result);Assertions.assertEquals(1,result);}

 5. 删除操作

5.1 在 mapper(interface)里面添加删除方法的声明

@Mapper// 和五大类注解是一样的
public interface UserMapper {/*** 删除对象*/int delByName(@Param("id") Integer id);
}

5.2 在 XMl 中添加 标签和删除的 sql 代码

<!--    默认返回受影响的行数--><delete id="delByName">delete from userinfo where id = ${id}</delete>

5.3 生成测试类

 @Testvoid delByName() {Integer id = 5;int resule = userMapper.delByName(id);System.out.println("删除:" + resule);Assertions.assertEquals(1,resule);}

相关文章:

MyBatis 查询数据库之二(增、删、改、查操作)

目录 1. 配置打印 MyBatis 执行的SQL 2. 查询操作 2.1 通过用户 ID 查询用户信息、查询所有用户信息 (1) Mapper 接口 (2)UserMapper.xml 查询所有用户的具体实现 SQL (3)进行单元测试 3. 增加操作 3.1 在 mapper&#xff08;interface&#xff09;里面添加增加方法的声…...

unraid docker桥接模式打不开页面,主机模式正常

unraid 80x86版filebrowser&#xff0c;一次掉电后&#xff0c;重启出现权限问题&#xff0c;而且filebrowser的核显驱动不支持amd的VA-API 因为用不上核显驱动&#xff0c;解压缩功能也用不上&#xff0c;官方版本的filebrowser还小巧一些&#xff0c;18m左右 安装的时候总是…...

第七章:进程间通信(IPC)——构成进程间通信的信道方案

系列文章目录 文章目录 系列文章目录前言进程间通信介绍进程间通信目的进程间通信发展进程间通信分类进程通信的原理 管道什么是管道pipe管道通信特点简单设计 命名管道什么是命名管道mkfifostrcmp/strncasecmpunlinkgetch简单设计 共享内存什么是共享内存shmget/ftokipcsshmct…...

部分常用CSS样式

目录 1.字体样式 2.文本样式 3.鼠标样式 cursor 4.背景样式 5.列表样式 6.CSS伪类 7.盒子模型 1.字体样式 font-family 字体类型&#xff1a;隶书” “楷体” font-size 字体大小&#xff1a;像素px font-weight 字体粗细&#xff1a;bold 定义粗体字…...

思科单臂路由、lacp链路聚合、NAT实验

实验拓扑图&#xff1a; 实验目的&#xff1a; 如图所示配置相应IP地址和VLAN&#xff0c;并通过在AR1上配置单臂路由&#xff0c;实现VLAN10和VLAN20的主机能够在VLAN间通信&#xff1b;在SW1和SW2的三条链路实施链路聚合&#xff0c;使用静态LACP模式&#xff0c;使一条链…...

【力扣每日一题】2023.8.5 合并两个有序链表

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们两个有序的链表&#xff0c;要我们保持升序的状态合并它们。 我们可以马上想要把两个链表都遍历一遍&#xff0c;把所有节点的…...

QT 驱动条码打印机(没有验证过)

这里的打印机是条码打印机&#xff0c;因为第一次接触这种设备&#xff0c;所以买了斑马的GK888t型条码打印机&#xff0c;据说ZPL语言就是斑马的杰作想必支持会好点。实际是&#xff0c;除了ZPL本身外&#xff0c;没有SDK&#xff0c;也没有DDK&#xff0c;所以&#xff0c;一…...

Kafka介绍

目录 1&#xff0c;kafka简单介绍 2&#xff0c;kafka使用场景 3&#xff0c;kafka基本概念 kafka集群 数据冗余 分区的写入 读取分区数据 顺序消费 顺序消费典型的应用场景&#xff1a; 批量消费 提交策略 kafka如何保证高并发 零拷贝技术&#xff08;netty&#…...

Django使用uwsgi+nginx部署,admin没有样式解决办法

Django使用uwsginginx部署,admin没有样式解决办法 如果使用了虚拟环境则修改nginx.conf文件中的/static/路径为你虚拟环境的路径&#xff0c;没有使用虚拟环境则改为你python安装路径下的static server {listen 8008;server_name location; #改为自己的域名&#xff0c;没域名…...

穷举深搜暴搜回溯剪枝(3)

一)字母大小写全排列 784. 字母大小写全排列 - 力扣&#xff08;LeetCode&#xff09; 1)从每一个字符开始进行枚举&#xff0c;如果枚举的是一个数字字符&#xff0c;直接忽视 如果是字母的话&#xff0c;进行选择是变还是不变 2)当进行遍历到叶子结点的时候&#xff0c;直接将…...

Bash 脚本的参数等

bash 的 $值 $0 : 表示当前脚本的名称${BASH_SOURCE[0]} : 表示当前 Bash 脚本文件的路径&#xff0c;可以理解为 $0 的安全版本&#xff0c;防止被修改。$1 : 表示第一个参数&#xff0c;以此类推$ : 表示所有传入脚本的参数$UID : 表示当前用户的 ID 号。如果当前用户是 roo…...

从哪些方面学HTML技术? - 易智编译EaseEditing

学习HTML技术是前端开发的基础&#xff0c;它用于定义网页的结构和内容。以下是学习HTML技术时可以关注的方面&#xff1a; HTML基本语法&#xff1a; 了解HTML标签的基本语法和用法&#xff0c;学习如何创建HTML文档和元素。 常用HTML标签&#xff1a; 学习常用的HTML标签&…...

非阻塞IO

非阻塞IO fcntl 一个文件描述符, 默认都是阻塞IO。fcntl可以将某个文件描述符设置为非阻塞IO&#xff0c;先看一下文档介绍。 传入的cmd的值不同&#xff0c;后面追加的参数也不相同。 fcntl函数有5种功能: 复制一个现有的描述符&#xff08;cmd F_DUPFD&#xff09;。获得…...

Debian如何让multilib和交叉编译工具链共存

Debian一个槽点是gcc/g/gfortran-multilib和交叉编译工具链如gcc/g/gfortran-riscv64-linux-gnu会互相卸载&#xff0c;解决办法如下&#xff1a; 1、安装build-essential&#xff08;gcc/g/libc6-dev/make/dpkg-dev&#xff09;和gfortran&#xff0c;记下被安装的gcc版本&am…...

Flink之JDBC Sink

这里介绍一下Flink Sink中jdbc sink的使用方法,以mysql为例,这里代码分为两种,事务和非事务 非事务代码 import org.apache.flink.connector.jdbc.JdbcConnectionOptions; import org.apache.flink.connector.jdbc.JdbcExecutionOptions; import org.apache.flink.connector.…...

lifecycleScope Unresolved reference

描述 导入了lifecycle.lifecycleScope&#xff0c;但是在activity中使用lifecycleScope报错出现Unresolved reference找不到引用。 导包 import androidx.lifecycle.lifecycleScope使用 lifecycleScope.launch(Dispatchers.IO) {...}错误 方案 代码中的activity继承Activ…...

P5960 【模板】差分约束算法

【模板】差分约束算法 题目描述 给出一组包含 m m m 个不等式&#xff0c;有 n n n 个未知数的形如&#xff1a; { x c 1 − x c 1 ′ ≤ y 1 x c 2 − x c 2 ′ ≤ y 2 ⋯ x c m − x c m ′ ≤ y m \begin{cases} x_{c_1}-x_{c_1}\leq y_1 \\x_{c_2}-x_{c_2} \leq y_2 \\…...

VSCode---通过ctrl+鼠标滚动改变字体大小

打开设置然后在右边输editor.mouseWheelZoo勾选即可实现鼠标滚动改变字体大小 4.这种设置的字体大小是固定的...

视频监控汇聚平台EasyCVR视频分享页面WebRTC流地址播放不了是什么原因?

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多…...

Libevent开源库的介绍与应用

libeventhttps://libevent.org/ 一、初识 1、libevent介绍 Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库&#xff0c;主要有以下几个亮点&#xff1a;事件驱动&#xff08; event-driven&#xff09;&#xff0c;高性能;轻量级&#xff0c;专注于网络&#xff…...

Graphormer效果可视化:预测结果置信度热力图与分子原子重要性归因展示

Graphormer效果可视化&#xff1a;预测结果置信度热力图与分子原子重要性归因展示 1. 模型概述 Graphormer是一种基于纯Transformer架构的图神经网络&#xff0c;专门为分子图&#xff08;原子-键结构&#xff09;的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子…...

AI编程革命:重塑程序员未来(一)

AI编程时代到来AI不会让程序员消失&#xff0c;但会深刻重塑这个职业。当代码生成变得轻而易举&#xff0c;程序员 的角色将从“代码编写者”升级为“问题解决者”与“架构设计师”。未来的核心竞争力&#xff0c;在于 理解复杂业务、设计系统逻辑&#xff0c;并用人类独有的创…...

如何用3步解锁百度网盘SVIP特权:macOS逆向工程的实践指南

如何用3步解锁百度网盘SVIP特权&#xff1a;macOS逆向工程的实践指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 你是否曾在macOS上使用百度网盘下…...

避开Psins惯导仿真中的那些“坑”:ethupdate参数传递与setdiag内存操作详解

避开Psins惯导仿真中的那些“坑”&#xff1a;ethupdate参数传递与setdiag内存操作详解 在惯性导航系统&#xff08;SINS&#xff09;仿真中&#xff0c;Psins工具箱因其高效性和灵活性备受开发者青睐。然而&#xff0c;即便是经验丰富的工程师&#xff0c;也常在一些看似简单的…...

如何居家远程调试在公司内网的 Kafka 集群!内网穿透让内网集群秒变公网可访问

前言 作为常年和分布式系统打交道的开发者&#xff0c;我猜你一定遇到过这种糟心事&#xff1a;想在家调试公司内网的 Kafka 集群&#xff0c;却被防火墙、无公网 IP 这些问题卡得死死的 —— 要么只能等运维开端口&#xff0c;要么被迫跑回公司&#xff0c;原本 10 分钟能搞定…...

Modbus实战:从功能码到网络选型的工业通信指南

1. Modbus协议基础&#xff1a;从功能码到设备角色 第一次接触Modbus时&#xff0c;我被它简洁的设计震惊了——这个诞生于1979年的协议&#xff0c;至今仍是工业自动化领域的通用语言。就像乐高积木一样&#xff0c;Modbus用几个基础功能码就能搭建出复杂的控制系统。让我们先…...

告别“假系”与“低挂”,云酷智能安全带重塑房建、桥梁及外墙装修的高空作业安全

在房建、桥梁建设及外墙装修场景中&#xff0c;吊篮作业的高空坠落风险始终悬而未决。传统管理模式下&#xff0c;“人员不系安全带”或“低挂高用”的违规行为屡禁不止。云酷智能安全带通过物联网技术实现实时监测&#xff0c;已成功应用于中交、中建、中铁等央企项目&#xf…...

一键部署Chat2DB:Docker与cpolar打造跨地域数据库管理神器

1. 为什么你需要Chat2DB和Docker的黄金组合 最近两年有个特别明显的趋势&#xff1a;数据正在从专业领域走向全民化。我见过太多产品经理被SQL卡住脖子&#xff0c;市场团队等一份报表要排期三天&#xff0c;甚至财务同事为了跑个月度数据要专门请IT部门吃饭。直到去年第一次用…...

别再死记硬背了!用‘打电话’、‘寄快递’、‘发长信’来秒懂网络交换三兄弟

别再死记硬背了&#xff01;用‘打电话’、‘寄快递’、‘发长信’来秒懂网络交换三兄弟 刚接触计算机网络时&#xff0c;那些晦涩的专业术语总让人望而生畏。记得我第一次看到"电路交换"、"分组交换"这些概念时&#xff0c;满脑子都是问号——直到有一天&…...

Axure RP中文界面终极配置指南:从新手到专家的高效本地化方案

Axure RP中文界面终极配置指南&#xff1a;从新手到专家的高效本地化方案 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn Axure …...