利用MyBatis实现CRUD操作

news2024/11/27 6:31:12

文章目录

      • 一、添加按姓名查询用户记录功能
        • 1、添加按姓名查询的映射语句
        • 2、在用户映射器接口里添加按姓名查询用户记录的方法
        • 3、添加按姓名查询用户记录的测试方法
        • 4、测试按姓名查询用户记录
      • 二、插入表记录
        • 1、在UserMapper.xml里增加映射语句 - insert
        • 2、在UserMapper接口里增加insert()方法
        • 3、在测试类TestUserMapper里添加测试方法testInsert()
        • 4、运行测试方法testInsert(),查看结果
        • 5、运行测试方法testFindByName(),查看结果
      • 三、更新表记录
        • 1、在UserMapper.xml里增加映射语句 - update
        • 2、在UserMapper接口里增加update()方法
        • 3、在测试类TestUserMapper里添加测试方法testUpdate()
        • 4、运行测试方法testUpdate(),查看结果
      • 四、删除表记录
        • 1、在UserMapper.xml文件里添加映射语句deleteById
        • 2、在UserMapper接口里增加deleteById()方法
        • 3、在测试类TestUserMapper里添加测试方法testDeleteById()

一、添加按姓名查询用户记录功能

  • 接上篇博客:初探MyBatis实现简单查询

1、添加按姓名查询的映射语句

  • UserMapper.xml里添加映射语句 - findByName
<?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="net.xxr.mybatis.mapper.UserMapper">
    <resultMap id="userMap" type="User">
        <result column="id" jdbcType="INTEGER" property="id" javaType="int"/>
        <result column="name" jdbcType="VARCHAR" property="name" javaType="String"/>
        <result column="age" jdbcType="INTEGER" property="age" javaType="int"/>
        <result column="address" jdbcType="VARCHAR" property="address" javaType="String"/>
    </resultMap>
    <!--按编号查询用户记录-->
    <select id="findById" parameterType="int" resultType="User">
        SELECT * FROM t_user WHERE id = #{id};
    </select>

    <!--查询全部用户记录-->
    <select id="findAll" resultMap="userMap">
        SELECT * FROM t_user;
    </select>

    <select id="findByName" resultType="User">
        SELECT * FROM t_user WHERE name LIKE CONCAT(#{name}, "%");
    </select>

</mapper>

2、在用户映射器接口里添加按姓名查询用户记录的方法

  • UserMapper接口里添加findByName()方法
    在这里插入图片描述

3、添加按姓名查询用户记录的测试方法

  • 在测试类TestUserMapper里添加测试方法testFindByName()
@Test
    public void testFindByName(){
        String name = "王";
        List<User> users = userMapper.findByName(name);
        users.forEach(user -> System.out.println(user));
    }

4、测试按姓名查询用户记录

  • 运行测试方法testFindByName(),查看结果
    在这里插入图片描述

二、插入表记录

1、在UserMapper.xml里增加映射语句 - insert

<insert id="insert" parameterType="User"
        useGeneratedKeys="true" keyProperty="id">
    INSERT INTO t_user(name, age, address)
    VALUES(#{name}, #{age}, #{address})
</insert>

2、在UserMapper接口里增加insert()方法

在这里插入图片描述

3、在测试类TestUserMapper里添加测试方法testInsert()

@Test
    public void testInsert(){
        User user = new User();
        user.setName("王雨涵");
        user.setAge(30);
        user.setAddress("龙马潭区长桥路2号");
        int count = userMapper.insert(user);
        sqlSession.commit();
        if (count > 0){
            System.out.println("记录插入成功!");
            System.out.println("插入的新纪录:" + user);
        }else {
            System.out.println("插入记录失败!");
        }
    }

4、运行测试方法testInsert(),查看结果

在这里插入图片描述

5、运行测试方法testFindByName(),查看结果

在这里插入图片描述

三、更新表记录

1、在UserMapper.xml里增加映射语句 - update

<update id="update" parameterType="User">
    UPDATE t_user SET name = #{name}, age = #{age},
    address = #{address} WHERE id = #{id};
</update>

2、在UserMapper接口里增加update()方法

在这里插入图片描述

3、在测试类TestUserMapper里添加测试方法testUpdate()

@Test
    public void testUpdate(){
        User user = userMapper.findById(4);
        System.out.println("更新前的记录:" + user);
        user.setName("萌萌哒");
        user.setAge(25);
        user.setAddress("北京朝阳区北苑路6号楼");
        int count = userMapper.update(user);
        if (count > 0){
            sqlSession.commit();
            System.out.println("更新成功!");
            System.out.println("更新后的记录:" + userMapper.findById(4));
        }else {
            System.out.println("遗憾,记录更新失败!");
        }

    }

4、运行测试方法testUpdate(),查看结果

在这里插入图片描述

四、删除表记录

1、在UserMapper.xml文件里添加映射语句deleteById

<delete id="deleteById" parameterType="int">
    DELETE FROM t_user WHERE id = #{id};
</delete>

2、在UserMapper接口里增加deleteById()方法

在这里插入图片描述

3、在测试类TestUserMapper里添加测试方法testDeleteById()

@Test
    public void testDeleteById(){
        int id = 4;
        User user = userMapper.findById(id);
        System.out.println("待删记录:" + user);
        int count = userMapper.deleteById(id);
        if (count > 0){
            sqlSession.commit();
            System.out.println("编号为:["  + id + "]的记录删除成功!" );
        }else {
            System.out.println("遗憾,编号[" + id + "]的记录删除失败!");
        }

    }

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【三十天精通Vue 3】第七天 Vue 3 响应式系统详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录引言一、Vue 3 响应式系统概述1.1 响应式系统的简介1.2 响应式系统…

【软件设计师14】UML建模

UML建模 稳定出一个&#xff0c;但是由于UML的图比较多&#xff0c;所以这种题比数据流图和数据库难度高 一般都会考用例图和类图&#xff0c;再附加其他的图 1. 用例图 包含关系include&#xff1a;比如登记外借信息必须先有用户登录 扩展关系extend&#xff1a;修改书籍…

C语言--文件操作--一起深入了解文件相关函数的知识

目录前言1.什么是文件1.1程序文件1.2数据文件1.3文件名2.文件的打开与关闭2.1文件指针2.2文件的打开与关闭fopen函数fclose函数3.文件的顺序读写3.1对比一组函数fputc函数fgetc函数fputs函数fgets函数fprintf函数fscanf函数fwrite函数fread函数4.1对比一组函数sprintfsscanf5.文…

ClickUp的最佳替代品,可更好地管理项目

ClickUp 是项目管理类的常见工具&#xff0c;它因团队协作、沟通、免费试用和强大功能等因素受到用户的喜爱。 该工具支持你清晰组织多个项目、进行团队协作并跟踪项目目标的实时进度。不同的视图选项使您能够为所有活动构建完美的工作流程。 尽管它很受欢迎&#xff0c;但用户…

ics-05(命令执行漏洞及伪协议读取)

打开链接&#xff0c;似曾相识的感觉&#xff08;前面做过一道题叫ics-06&#xff0c;那道题是对id的一个爆破&#xff09; 尝试后发现只有设备维护中心可以跳转 这和我们使用御剑扫描出来的结果是一样的 使用PHP伪协议读取 index.php 页面 构造payload&#xff08;在愚人杯ht…

小黑跟尚香一起疯狂星期四,然后慢慢跑回家,生活逐渐明朗,完赛了副中心全程马拉松的leetcode之旅:752. 打开转盘锁

宽度优先搜索法 class Solution:def openLock(self, deadends: List[str], target: str) -> int:# 目的地在死亡数组里if target in deadends:return -1# 起点在死亡数字里if 0000 in deadends:return -1# 起点就是目标字符串if 0000 target:return 0# 定义前向函数def pr…

Python与c语言的区别与联系

Python与c语言都是一种机器学习语言&#xff0c;进过长时间的学习和总结&#xff0c;我将Python与c语言的一些特点总结成以下几点&#xff0c;不全面还望多多指正。 1、因为C语言是编译型语言&#xff0c;python是解释型语言&#xff0c;所以python的执行速度没有C语言那么快。…

回归预测 | MATLAB实现GA-GRU遗传算法优化门控循环单元的数据多输入单输出回归预测

回归预测 | MATLAB实现GA-GRU遗传算法优化门控循环单元的数据多输入单输出回归预测 目录回归预测 | MATLAB实现GA-GRU遗传算法优化门控循环单元的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料效果一览 基本介绍 MATLAB实现GA-GRU遗传算法优化门控循环单元的数据多…

详解Nginx代理WordPress搭建个人网站系统

1、搭建环境说明 服务器&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) PHP&#xff1a;php-8.2.4 PHP: Downloads Nginx: 1.24.0 http://nginx.org/en/download.html WordPress:6.2 Download – WordPress.org Mysql&#xff1a;5.7.22 MySQL Communit…

【Java EE】-网络编程(一) 网络初识

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【JavaEE】 主要内容&#xff1a;单机、局域网、广域网、交换机、路由器。IP地址&#xff0c;端口号&#xff0c;协议&#xff0c;五元组。 协议分层&#xff0c;OSI七层网络模型…

【开源项目】SpringBoot实现接口加密解密

需求背景 在我们日常的Java开发中&#xff0c;免不了和其他系统的业务交互&#xff0c;或者微服务之间的接口调用 如果我们想保证数据传输的安全&#xff0c;对接口出参加密&#xff0c;入参解密。 但是不想写重复代码&#xff0c;我们可以提供一个通用starter&#xff0c;提…

数据结构系列17——lambda表达式

目录 1. 基本概念 2. 基本语法 3. 函数式接口 4. Lambda表达式的基本使用 4.1 语法精简 5. 变量捕获 6. Lambda在集合当中的使用 1. 基本概念 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一…

再聊ChatGPT(关于安全,隐私和法律方面的风险)

我在上一篇博文中有谈到ChatGPT 发展可能会经历的一些阶段。ChatGPT的必经阶段&#xff1a;野蛮生长时代-管理层监管与风险提示-号召国产化-规范化常态化。 昨天刚好看到监管部门发文 说明监管部门已经意识到到ChatGPT野蛮生长阶段&#xff0c;其实是存在很多漏洞和问题的。 …

2022年 全国职业院校技能大赛(中职组)网络安全赛项 正式赛卷 A模块 做题记录

评分标准文件及环境 评分标准&#xff1a;ZZ-2022029 网络安全赛项正式赛卷.zip 自己做的Linux靶机&#xff1a; 自己做的Windows靶机&#xff1a; 文章目录评分标准文件及环境A-1 任务一 登录安全加固1. 密码策略&#xff08;Windows&#xff0c;Linux&#xff09;a. 最小密码…

年少不知回损好,却把插损当作宝

一博高速先生成员&#xff1a;黄刚 因为本期要讲的是插损和回损的关系&#xff0c;因此本文的开头&#xff0c;我们还是首先回顾下S参数的概念。首先我们需要知道S参数其实是个黑匣子&#xff0c;什么是黑匣子呢&#xff0c;那就是我们其实不需要知道它包含了哪些链路结构&…

steam游戏搬砖项目怎么做?月入过万的steam搬砖项目教程拆解

steam游戏搬砖项目怎么做?月入过万的steam搬砖项目教程拆解 大家好&#xff0c;我是童话姐姐&#xff0c;今天继续来聊Steam搬砖项目。 Steam搬砖项目也叫CSGO搬砖项目&#xff0c;它并不是什么刚面世的新项目&#xff0c;是已经存在至少七八年的一个资深老牌项目。这个项目…

QT4与QT5兼容问题

QT4 与QT5 兼容&#xff0c;源码差异部分通过QT_VERSION 宏来区分 常见区别 widgets prinsupport charts 等模块一如方式&#xff0c;Qt5 将QtWidgets QtPrintsupport 模块从QtGui 中分离出来&#xff0c;QT4 中没有qjson4 和 charts 模块&#xff0c;需要特殊处理 在pro文件…

SpringSecurity之基础认知

前言 之前一直说开一个SpringSecurity的专栏&#xff0c;今天抽空整理一下&#xff0c;准备开始更新。 也欢迎大家订阅此专栏&#xff01; 什么是SpringSecurity&#xff1f; Spring是非常成功的Java应用框架&#xff0c;目前是非常主流的开发框架。Spring Securtiy正是我们…

RPC 漫谈: 限流问题

RPC 漫谈&#xff1a; 限流问题 微服务之间的 RPC 调用往往会使用到限流功能&#xff0c;但是很多时候我们都是用很简单的限流策略&#xff0c;亦或是工程师拍脑袋定一个限流值。 这篇文章主要讨论在 RPC 限流中&#xff0c;当前存在的问题和可能的解决思路。 为什么需要限流…

Tailwind CSS 小案例,创建漂亮的收藏卡片列表

作为人类&#xff0c;我们有一种天生的倾向&#xff0c;喜欢收集不同的物品&#xff0c;并根据兴趣将它们分组。从邮票到书籍&#xff0c;人们收集和分组的物品种类繁多。定义上&#xff0c;收藏是一组事物&#xff0c;通常是由某个人创建的。例如&#xff0c;很多孩子会收集漫…