Mybatis基础---------增删查改
目录结构

增删改
1、新建工具类用来获取会话对象
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.io.Resources;import java.io.IOException;
import java.io.InputStream;/*** 静态变量:使用 static 关键字声明的变量是类级别的,所有实例共享相同的静态变量。这意味着无论创建多少个对象,它们都将共享相同的静态变量值。* public class MyClass {* static int staticVar; // 静态变量,所有实例共享* }* 静态方法:使用 static 关键字声明的方法是类级别的,可以通过类名直接调用,无需实例化对象。这些方法通常用于执行与类本身相关的操作,而不是特定实例的操作。* public class MyClass {* static void staticMethod() {* // 静态方法* }* }* 静态代码块:使用 static 关键字标识的代码块在类加载时执行,通常用于进行类级别的初始化操作。*/
public class SqlSessionUtil {static SqlSessionFactory sqlSessionFactory;static {try {InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//加载输入流创建会话工厂} catch (IOException e) {e.printStackTrace();}}public static SqlSession openSession(){return sqlSessionFactory.openSession();}}
2、加入junit依赖
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope>
</dependency>
3、通过映射传递属性
之前的sql语句全部写在了映射文件中,然而在实际应用时是通过映射传递属性的,也就是java对象对应sql语句中的占位符属性,属性名一般和java对象中的属性名相同,我们只需要用#{}作为占位符,占位符名称与java对象属性名一致即可。
如下实体类:
import java.util.Date;
public class User {private Integer id;private String username;private String password;private String salt;private String email;private int type;private int status;private String activationCode;private String headerUrl;private Date createTime;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSalt() {return salt;}public void setSalt(String salt) {this.salt = salt;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public int getType() {return type;}public void setType(int type) {this.type = type;}public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}public String getActivationCode() {return activationCode;}public void setActivationCode(String activationCode) {this.activationCode = activationCode;}public String getHeaderUrl() {return headerUrl;}public void setHeaderUrl(String headerUrl) {this.headerUrl = headerUrl;}public User(Integer id, String username, String password, String salt, String email, int type, int status, String activationCode, String headerUrl, Date createTime) {this.id = id;this.username = username;this.password = password;this.salt = salt;this.email = email;this.type = type;this.status = status;this.activationCode = activationCode;this.headerUrl = headerUrl;this.createTime = createTime;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}
}
映射文件
<insert id="insertUser">INSERT INTO users (user_id, username, password, salt, email, type, status, activation_Code, header_url, create_time)
VALUES (null, #{username}, #{password}, #{salt}, #{email}, #{type}, #{status}, #{activationCode}, #{headerUrl}, #{createTime});
</insert>
测试:
@Test
public void insertTest(){SqlSession sqlSession = SqlSessionUtil.openSession();User user = new User(null, "JohnDoe", "password", "salt123", "johndoe@example.com", 1, 1, "abcxyz", "https://example.com/image.jpg", new Date());//这里传入user实体,mybatis会自动将user属性值填充到sql语句中的占位符sqlSession.insert("insertUser",user);sqlSession.commit();sqlSession.close();//关闭会话
}

测试下修改和删除
<delete id="deleteUser">delete from users where user_id=#{id};
</delete>
<update id="updateUser">UPDATE usersSET username = #{username},password = #{password},salt = #{salt},email = #{email},type = #{type},status = #{status},activation_Code = #{activationCode},header_Url = #{headerUrl},create_Time = #{createTime}WHERE user_id = #{id};
</update>
@Test//修改
public void updateTest(){SqlSession sqlSession = SqlSessionUtil.openSession();User user = new User(2, "DDDD", "password", "salt123", "johndoe@example.com", 1, 1, "abcxyz", "https://example.com/image.jpg", new Date());sqlSession.insert("updateUser",user);sqlSession.commit();sqlSession.close();//关闭会话
}
@Test//删除
public void deleteTest(){SqlSession sqlSession = SqlSessionUtil.openSession();sqlSession.insert("deleteUser",2);//当sql只有一个占位符时,传递的参数会直接赋值到该占位符中,与占位符名称无关sqlSession.commit();sqlSession.close();//关闭会话
}

查询
获取结果集,通过select标签中的resultType参数来指定查询结果封装到对应的实体类中,如果实体类中的属性与数据库表中属性不一致,可以使用as将对应数据库表中列名重命名并与实体类一致。
<select id="selectOneUser" resultType="User">select user_id as id, username, password, salt, email, type, status, activation_Code as activationCode, header_url as headerUrl, create_time as createTime from users where user_id=#{id};
</select>

或者采用另一种方式:通过在<resultMap> 中使用 <result> 标签来进行手动映射。
column--property==>数据库列名--实体类属性名
<resultMap id="userResultMap" type="User"><id property="id" column="user_id"/><result property="username" column="username"/><result property="password" column="password"/><result property="salt" column="salt"/><result property="email" column="email"/><result property="type" column="type"/><result property="status" column="status"/><result property="activationCode" column="activation_Code"/><result property="headerUrl" column="header_url"/><result property="create_time" column="createTime"/>
</resultMap>
<select id="selectUser" resultMap="userResultMap">select * from users;
</select>
@Test
public void selectTest(){SqlSession sqlSession = SqlSessionUtil.openSession();List<User> selectUser = sqlSession.selectList("selectUser");for (User user : selectUser) {System.out.println(user.toString());}sqlSession.commit();sqlSession.close();//关闭会话
}

这里说明:不管是查询单个记录还多个记录,设置返回封装映射时,resultType应该设置为实体类或者List<实体类>型中的实体类。设置手动映射resultMapper同样如此。
相关文章:
Mybatis基础---------增删查改
目录结构 增删改 1、新建工具类用来获取会话对象 import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.ibatis.io.Resources;import java.io…...
CentOS查看修改时间
经常玩docker的朋友应该都知道,有很多的镜像运行起来后,发现容器里的系统时间不对,一般是晚被北京时间8个小时(不一定)。 这里合理怀疑是镜像给的初始时区是世界标准时间(也叫协调世界时间)。 有…...
Kafka消费流程
Kafka消费流程 消息是如何被消费者消费掉的。其中最核心的有以下内容。 1、多线程安全问题 2、群组协调 3、分区再均衡 1.多线程安全问题 当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。 对于线程安全&…...
RPC原理介绍与使用(@RpcServiceAnnotation)
Java RPC(Remote Procedure Call,远程过程调用)是一种用于实现分布式系统中不同节点之间通信的技术。它允许在不同的计算机或进程之间调用远程方法,就像调用本地方法一样。 ** 一.Java RPC的原理如下: ** 定义接口&…...
力扣labuladong——一刷day94
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言二叉堆(Binary Heap)没什么神秘,性质比二叉搜索树 BST 还简单。其主要操作就两个,sink(下沉…...
Vim 是一款强大的文本编辑器,广泛用于 Linux 和其他 Unix 系统。以下是 Vim 的一些基本用法
Vim 是一款强大的文本编辑器,广泛用于 Linux 和其他 Unix 系统。以下是 Vim 的一些基本用法: 打开文件: vim filename 基本移动: 使用箭头键或 h, j, k, l 分别向左、下、上、右移动。Ctrl f: 向前翻页。Ctrl b: 向后翻页。…...
软件工程:黑盒测试等价分类法相关知识和多实例分析
目录 一、黑盒测试和等价分类法 1. 黑盒测试 2. 等价分类法 二、黑盒测试等价分类法实例分析 1. 工厂招工年龄测试 2. 规定电话号码测试 3. 八位微机测试 4. 三角形判断测试 一、黑盒测试和等价分类法 1. 黑盒测试 黑盒测试就是根据被测试程序功能来进行测试…...
stable-diffusion 学习笔记
必看文档: 万字长篇!超全Stable Diffusion AI绘画参数及原理详解 - 知乎 (提示词)语法控制 常用语法: 加权:() 或 {} 降权:[](word)//将括号内的提示词权重提高 1.1 倍 ((word))//将括号内的提示…...
手写webpack核心原理,支持typescript的编译和循环依赖问题的解决
主要知识点 babel读取代码的import语句算法:bfs遍历依赖图为浏览器定义一个require函数的polyfill算法:用记忆化搜索解决require函数的循环依赖问题 Quick Start GitHub:https://github.com/Hans774882968/mini-webpack npm install npm…...
开箱即用之MyBatisPlus XML 自定义分页
调用方法 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;public Page<User> queryListByPage(User user) { Page<User> page new Page<>(1, 12); return userMapper.queryListByPage(page, user); } mapper接口 import co…...
GPT应用开发:运行你的第一个聊天程序
本系列文章介绍基于OpenAI GPT API开发应用的方法,适合从零开始,也适合查缺补漏。 本文首先介绍基于聊天API编程的方法。 环境搭建 很多机器学习框架和类库都是使用Python编写的,OpenAI提供的很多例子也是Python编写的,所以为了…...
力扣刷MySQL-第一弹(详细解析)
🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:力扣刷题讲解-MySQL 🍹文章作者技术和水平很有限,如果文中出…...
Xcode 15 for Mac:超越开发的全新起点
作为一名开发人员,你是否正在寻找一款强大而高效的开发工具,来帮助你在Mac上构建出卓越的应用程序?那么,Xcode 15就是你一直在寻找的答案。 Xcode 15是苹果公司最新推出的一款集成开发环境(IDE)࿰…...
2021腾讯、华为前端面试题集(基础篇)
Vue 面试题 生命周期函数面试题 1.什么是 vue 生命周期2.vue 生命周期的作用是什么 3.第一次页面加载会触发哪几个钩子 4.简述每个周期具体适合哪些场景 5.created 和 mounted 的区别 6.vue 获取数据在哪个周期函数 7.请详细说下你对 vue 生命周期的理解? **vue 路由…...
怎么修改或移除WordPress后台仪表盘概览底部的版权信息和主题信息?
前面跟大家分享『WordPress怎么把后台左上角的logo和评论图标移除?』和『WordPress后台底部版权信息“感谢使用 WordPress 进行创作”和版本号怎么修改或删除?』,其实在WordPress后台仪表盘的“概览”底部还有一个WordPress版权信息和所使用的…...
计算机三级(网络技术)——应用题
第一题 61.输出端口S0 (直接连接) RG的输出端口S0与RE的S1接口直接相连构成一个互联网段 对172.0.147.194和172.0.147.193 进行聚合 前三段相同,将第四段分别转换成二进制 11000001 11000010 前6位相同,加上前面三段 共30…...
Node.js基础知识点(四)
本节介绍一下最简单的http服务 一.http 可以使用Node 非常轻松的构建一个web服务器,在 Node 中专门提供了一个核心模块:http http 这个模块的就可以帮你创建编写服务器。 1. 加载 http 核心模块 var http require(http) 2. 使用 http.createServe…...
持久双向通信网络协议-WebSocket-入门案例实现demo
1 介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。 HTTP协议和WebSocket协议对比: HTTP是短连接࿰…...
LV.13 D10 Linux内核移植 学习笔记
具体实验步骤在lv13day10 实验十 一、Linux内核概述 1.1 内核与操作系统 内核 内核是一个操作系统的核心,提供了操作系统最基本的功能,是操作系统工作的基础,决定着整个系统的性能和稳定性 操作系统 操作系统是在内核的基础上添…...
STM32面试体验和题目
目录 一、说一下你之前的工作主要干了什么? 二、stm32有关的知识点 1.stm32的外设有哪一些 2.你的毕业论文的项目里面是怎么设计的 三,C语言的考察 1.写一个结构体(结构体的内容自由发挥) 2.写一个指针型的变量 3.结构体是…...
UE5蓝图与C++权力边界:编辑器独占与全栈覆盖解析
1. 这不是“选哪个更好”,而是“谁在什么时候说了算”在UE5项目组里,我见过太多次这样的场景:美术同学改完一个材质参数,发现蓝图里调用的函数突然不生效了;程序刚写完一套C Actor逻辑,策划在编辑器里拖拽组…...
Steam协议逆向实战:NetHook2与SteamKit2协同分析
1. 这不是“抓包”,而是逆向理解Steam通信协议的起点很多人第一次听说“NetHook2 SteamKit2”组合时,下意识会把它等同于Wireshark抓HTTP流量——点开Steam客户端,随便点个好友头像,抓一堆TCP包,然后对着十六进制窗口…...
Claude Desktop for Linux桌面集成:.desktop文件与MIME类型配置
Claude Desktop for Linux桌面集成:.desktop文件与MIME类型配置 【免费下载链接】claude-desktop-debian Claude Desktop for Linux 项目地址: https://gitcode.com/GitHub_Trending/cl/claude-desktop-debian Claude Desktop for Linux是一款强大的桌面应用…...
LoftQ量化技术终极指南:如何在4bit精度下高效微调大语言模型
LoftQ量化技术终极指南:如何在4bit精度下高效微调大语言模型 【免费下载链接】peft 🤗 PEFT: State-of-the-art Parameter-Efficient Fine-Tuning. 项目地址: https://gitcode.com/gh_mirrors/pe/peft 在大语言模型(LLM)微调的实践中,…...
2026 国内 ChatGPT 镜像站推荐
📖 国内直接访问,支持 GPTs、绘图、文件分析,对话数据隔离 ✅ 写方案/周报,描述需求直接生成,5分钟搞定 ✅ 代码报错,粘贴进去秒出解决方案 ✅ 读文件/PDF,上传即可提问,不用逐字看…...
Stata面板数据回归保姆级教程:从xtset到豪斯曼检验,手把手搞定实证分析
Stata面板数据回归实战指南:从数据准备到模型选择的完整解析 面板数据分析在经济学、管理学等社科领域占据着核心地位,但许多初学者在面对Stata操作时常常感到无从下手。本文将从一个完整的实证分析流程出发,不仅介绍基础命令,更着…...
2026武汉美术艺考培训机构排名出炉,家长择校必看!
在美育教育持续受重视的背景下,美术高考成为众多学子升学的重要渠道。武汉作为华中美育核心城市,美术培训机构已超 300 家,市场竞争激烈。据湖北省教育考试院 2026 年湖北美术联考数据,全省美术考生超 1.8 万人,武汉占…...
Vue/React/Svelte通用Lovable实践框架(内部首发):1套配置+4个插件=自动注入用户喜爱度
更多请点击: https://kaifayun.com 第一章:Vue/React/Svelte通用Lovable实践框架(内部首发):1套配置4个插件自动注入用户喜爱度 Lovable 是一套面向用户体验(UX)可量化提升的前端工程化实践框架…...
还在熬夜起草各类通知?2026便捷AI办公好物,轻松写完正式公文
作为一名在行政岗摸爬滚打五年的职场人,我每天的工作不是泡在各类会议里,就是埋头起草通知、整理纪要。相信不少行政、文秘岗位的朋友都和我有一样的困扰:公司部门多、会议密,每周光是例会、项目协调会、临时部署会就要开三四场&a…...
【linux学习】linux工具篇(下)
Linux调试器-gdb使用,Linux项目自动化构建工具-make/Makefile我是程序员小青蛙,下面分享linux的工具利用前言程序的发布方式有两种,debug模式和release模式 Linux gcc/g出来的二进制程序,默认是release模式 要使用gdb调试…...
