MyBatis CURD操作深度解析

news2025/1/20 3:54:50

Alt

文章目录

    • 简单查询操作
    • 插入、更新和删除操作
    • selectKey元素的作用
    • 结语

🎈个人主页:程序员 小侯
🎐CSDN新晋作者
🎉欢迎 👍点赞✍评论⭐收藏
✨收录专栏:MyBatis
✨文章内容: CURD操作
🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗

MyBatis作为一款优秀的Java持久层框架,提供了强大的CURD(Create, Update, Read, Delete)操作支持。在本文中,我们将深入探讨如何在MyBatis中执行简单的查询,以及如何进行插入、更新和删除操作。同时,我们还将详细解释MyBatis中的selectKey元素的作用。
在这里插入图片描述

简单查询操作

在MyBatis中执行简单的查询操作通常涉及到使用<select>元素。以下是一个简单的例子:

<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <select id="getUserById" resultType="User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

在这个例子中,我们定义了一个名为getUserById的查询操作,通过#{id}引用参数。resultType="User"表示我们期望的查询结果将映射到User对象。

接下来,我们可以在Java代码中调用这个查询操作:

// UserDao.java
public interface UserDao {
    User getUserById(int id);
}
// UserDaoImpl.java
public class UserDaoImpl implements UserDao {
    private SqlSessionFactory sqlSessionFactory;

    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override
    public User getUserById(int id) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            return sqlSession.selectOne("com.example.UserMapper.getUserById", id);
        }
    }
}

在这里,我们使用SqlSessionselectOne方法执行查询操作,指定了查询的命名空间和操作ID。这样,我们就能够根据用户ID获取对应的用户信息。
在这里插入图片描述

插入、更新和删除操作

MyBatis提供了<insert><update><delete>等元素来执行插入、更新和删除操作。以下是一个简单的插入操作的例子:

<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <insert id="insertUser" parameterType="User">
        INSERT INTO users (username, email) VALUES (#{username}, #{email})
    </insert>
</mapper>

在这个例子中,我们定义了一个名为insertUser的插入操作,使用#{username}#{email}引用User对象的属性。

类似地,更新和删除操作可以通过<update><delete>元素进行定义。

<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <update id="updateUser" parameterType="User">
        UPDATE users SET username = #{username}, email = #{email} WHERE id = #{id}
    </update>

    <delete id="deleteUserById" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

在Java代码中,我们可以分别调用SqlSessioninsertupdatedelete方法来执行这些操作。

// UserDao.java
public interface UserDao {
    void insertUser(User user);

    void updateUser(User user);

    void deleteUserById(int id);
}
// UserDaoImpl.java
public class UserDaoImpl implements UserDao {
    private SqlSessionFactory sqlSessionFactory;

    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override
    public void insertUser(User user) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            sqlSession.insert("com.example.UserMapper.insertUser", user);
            sqlSession.commit();
        }
    }

    @Override
    public void updateUser(User user) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            sqlSession.update("com.example.UserMapper.updateUser", user);
            sqlSession.commit();
        }
    }

    @Override
    public void deleteUserById(int id) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            sqlSession.delete("com.example.UserMapper.deleteUserById", id);
            sqlSession.commit();
        }
    }
}

在这里,我们分别实现了插入、更新和删除操作。需要注意的是,我们在每个操作执行后都调用了commit方法提交事务。

selectKey元素的作用

selectKey元素是MyBatis中一个比较特殊且强大的元素,它通常用于在执行插入操作后获取生成的主键值。以下是一个使用selectKey元素的例子:

<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <insert id="insertUser" parameterType="User">
        <selectKey keyProperty="id" resultType="int" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT INTO users (username, email) VALUES (#{username}, #{email})
    </insert>
</mapper>

在这个例子中,selectKey元素的作用是在插入操作后执行SELECT LAST_INSERT_ID()语句,获取生成的主键值,并将其设置到User对象的id属性中。

// UserDao.java
public interface UserDao {
    void insertUser(User user);
}
// UserDaoImpl.java
public class UserDaoImpl implements UserDao {
    private SqlSessionFactory sqlSessionFactory;

    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override
    public void insertUser(User user) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            sqlSession.insert("com.example.UserMapper.insertUser", user);
            sqlSession.commit();
            System.out.println("Generated ID after insertion: " + user.getId());
        }
    }
}

在Java代码中,我们仍然只需要调用insertUser方法,而不用手动设置主键值。

结语

MyBatis提供了丰富而强大的CURD操作支持,通过简单的配置和映射文件,我们能够轻松地实现对数据库的增、删、改、查。同时,selectKey元素的灵活运用使得获取生成的主键值变得非常方便。在实际项目中,对这些CURD操作的熟练运用将对数据持久层的开发产生积极的影响。

后记 👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1215328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决requests库中的期限处理问题:从404到异常再到修复

在使用requests库进行网络请求时&#xff0c;用户可能会遇到一个奇怪的问题&#xff1a;当没有指定请求的期限时&#xff0c;他们得到的响应是404错误&#xff0c;但是一旦指定了请求的期限&#xff0c;就立刻遇到了一个异常&#xff0c;声称远程主机强制关闭了连接。这个问题让…

android studio基本使用

as如果一直index&#xff0c;就把缓存目录全部删除 记录下as日常使用。 调试工具 c动态库调试 ndk会带一些调试工具&#xff0c;例如 C:\Users\luopu\AppData\Local\Android\Sdk\ndk\20.0.5594570\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch…

群晖7.2版本通过Container Manager安装xiaoya-alist

小雅Alist&#xff0c;可以说是Alist应用中挂载阿里云最完美的成功案例。 一、下载镜像 注册表中下载镜像 Container Manager应该是7.2版本才改名&#xff0c;就是以前的docker。 打开【Container Manager】-【注册表】-【搜索框】搜索 xiaoya 内容区域&#xff0c;搜出的…

快速入门ESP32——开发环境配置PlatformIO IDE

相关文章 快速入门ESP32——开发环境配置Arduino IDE 快速入门ESP32——开发环境配置PlatformIO IDE 一、下载安装二、验证 一、下载安装 下载安装 vscode 安装PlatformIO插件 创建工程 二、验证 写一个简单的函数来验证一下功能 void setup() {// put your setup cod…

rocketmq 安装dashboard1.0.0 mq消息控制台安装 rocketmq控制台安装 rocketmq-dashboard-1.0.0编译安装

1. 官网&#xff1a; 下载 | RocketMQ 2. dashboard安装包位置&#xff1a; 在连接最下面&#xff0c;点击download.zip即可 3. 需要安装maven, 编译命令&#xff1a; mvn clean install -U -Dmaven.test.skiptrue4. 启动jar: java -jar rocketmq-dashboard-1.0.0.jar &…

Maven编译报错:javacTask: 源发行版 1.8 需要目标发行版 1.8

报错截图&#xff1a; IDEA中的jdk检查都正常设置的1.8一点毛病没有。参考其他帖子链接如下&#xff1a; https://blog.csdn.net/zhishidi/article/details/131480199https://blog.51cto.com/u_16213460/7197764https://blog.csdn.net/lck_csdn/article/details/125387878 逐…

dewarp:数据变换

一. 效果 输入图片&#xff1a;test.jpg 前向场:test.npy 输出图片&#xff1a;dewarp_img.jpg 二. 代码 import os import cv2 import numpy as npdef align_flow(image, flow):"""flow: -1~1, 非文本区域是nanbm_flow: 对齐的bm&#xff0c;可以直接对图…

Android14 Beta 5

Beta 5&#xff0c;这是 Android 14 Beta 计划中的最后一次计划更新。这是确保您的应用程序已准备就绪并在非 Beta 用户开始获取 Android 14 之前提供反馈的最后机会。为了使您能够在跨多种外形尺寸的设备上测试您的应用程序&#xff0c;Beta 5 适用于 Pixel Tablet 和 Pixel F…

Camtasia2024喀秋莎微课制作神器新版本功能介绍

最近无论是b站&#xff0c;抖音&#xff0c;快手等视频软件中都有不少微课视频、电视剧解说横空出世&#xff0c;通过这些“热度”带来的收益也是无法估量的&#xff0c;很多自媒体博主月入上万惹人羡慕。 不少朋友也想在这股短视频洪流中分一碗羹&#xff0c;但又苦于技术跟不…

基于Springboot的非物质文化网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的非物质文化网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 项目介…

redis数据结构汇总

redis每个【数据类型】所对应的【数据结构】 小结&#xff1a; String 主要是SDS&#xff0c;Long 1、基本编码方式是RAW&#xff0c;value SDS 2、EMBSTR编码 value SDS 并且SDS长度小于44字节&#xff0c;只需要调用一次内存分配函数&#xff0c;效率更高 3、INT编码&a…

超详细 | 萤火虫算法原理及其实现(Matlab)

群智能(Swarm Intelligence&#xff0c;SI)是一类分散自组织系统的集体智能行为的总称&#xff0c;该表述最早在1989年由Gerardo Beni在分子自动机系统中提出。SI系统可视作一组简单的个体&#xff0c;其个体与个体、个体与环境之间存在交互作用&#xff0c;最终表征出智能行为…

【第2章 Node.js基础】2.7 Node.js 的流

2.7 Node.js 的流 什么是流 流不是 Node.js 特有的概念。它们是几十年前在 Unix 操作系统中引入的。 我们可以把流看作这些数据的集合&#xff0c;就像液体一样&#xff0c;我们先把这些液体保存在一个容器里&#xff08;流的内部缓冲区 BufferList&#xff09;&#xff0c;…

全平台自动去水印源码系统 一键下载高清无水印视频 支持全平台 带完整搭建部署教程

大家好啊&#xff0c;今天源码小编要来给大家分享一款超级好用的全平台自动去水印源码系统 。这款去水印的源码系统&#xff0c;支持全平台&#xff0c;可以帮你一键下载高清无水印视频。 以下是部分核心代码示例&#xff1a; 系统特色功能一览&#xff1a; 全平台支持&#…

免费分享!全国河流断面水质监测数据

随着人类活动的不断增加&#xff0c;河流的水质受到严重污染&#xff0c;为了保护河流生态环境&#xff0c;需要对河流断面水质进行监测。全国河流断面水质监测数据是反映全国河流污染状况的重要指标之一&#xff0c;通过对数据的分析&#xff0c;可以了解不同地区河流污染情况…

vue+element模仿实现PC端网易云,对接第三方接口

一、项目预览 在线预览&#xff1a;点击访问 其他项目访问&#xff1a;点击访问 项目使用传统vue项目结构实现&#xff0c;前端采用element实现。 element官网&#xff1a;Element - The worlds most popular Vue UI framework 二、 项目效果图 1.首页 2.歌单详情列表 3.歌…

国产高云FPGA开发软件Gowin的下载、安装、Licence共享,按照我的方案保证立马能用,不能用你铲我耳屎

目录 1、前言2、GOWIN简介3、GOWIN下载4、GOWIN安装5、Licence共享方案&#xff0c;立马就能用6、网盘福利领取 1、前言 “苟利国家生死以&#xff0c;岂因祸福避趋之&#xff01;”大洋彼岸的我优秀地下档员&#xff0c;敏锐地洞察到祖国的短板在于高精尖半导体的制造领域&am…

el-table操作栏添加el-dropdown获取当前行的数据

0 效果 点击子合同获取到当前行的id 1 代码 beforeHandleCommand(row, childCommand) {return { row: row, childCommand: childCommand }; }, addChildBtn(command) {const row command.row;if (command.childCommand 0) {// todo} else {// todo} },

使用Rust编写爬虫代码来抓取精美的图片

目录 一、引言 二、Rust爬虫框架介绍 三、爬虫代码实现 1、创建Scrapy项目 2、创建Spider 3、定义Item对象 4、修改settings.py文件 5、运行爬虫程序 四、图片抓取与存储 五、优化爬虫性能 六、注意事项 总结 一、引言 网络爬虫是一种自动化的网页访问工具&#x…

Ghostbuster:一个准确度高的AI生成文本检测工具

大语言模型如ChatGPT&#xff0c;以其卓越的写作能力引发了问题。学生们纷纷利用这些模型代写作业&#xff0c;导致一些学校不得不采取禁止ChatGPT的措施。此外&#xff0c;这些模型还存在生成带有事实错误的文本的倾向&#xff0c;因此谨慎的读者可能想知道&#xff0c;在信任…