web第十次课后作业--Mybatis的增删改查

news2025/6/7 16:25:17

(一)删除操作

功能:根据主键删除数据

  • SQL 语句
-- 删除id=17的数据
delete from emp where id = 17;

Mybatis 框架让程序员更关注于 SQL 语句

  • 接口方法
@Mapper
public interface EmpMapper {

    //@Delete("delete from emp where id = 17")
    //public void delete();
    //以上delete操作的SQL语句中的id值写成固定的17,就表示只能删除id=17的用户数据
    //SQL语句中的id值不能写成固定数值,需要变为动态的数值
    //解决方案:在delete方法中添加一个参数(用户id),将方法中的参数,传给SQL语句

    /**
     * 根据id删除数据
     * @param id    用户id
     */
    @Delete("delete from emp where id = #{id}")//使用#{key}方式获取方法中的参数值
    public void delete(Integer id);

}

@Delete 注解:用于编写 delete 操作的 SQL 语句

如果 mapper 接口方法形参只有一个普通类型的参数,#{…} 里面的属性名可以随便写,如:#{id}、#{value}。但是建议保持名字一致。

测试结果
在这里插入图片描述

🆔后接的是“?”,而不是16。这种 SQL 语句我们称为预编译 SQL。
这种SQL语句主要是为了防止SQL注入–将敏感字进行转义,以保障 SQL 的安全性。

(二)增加操作

功能:新增员工信息在这里插入图片描述
那要如何实现在插入数据之后返回所插入行的主键值呢?

  • 默认情况下,执行插入操作时,是不会主键值返回的。如果我们想要拿到主键值,需要在 Mapper 接口中的方法上添加一个 Options 注解,并在注解中指定属性 useGeneratedKeys=true 和 keyProperty=“实体类属性名”
@Mapper
public interface EmpMapper {

    //会自动将生成的主键值,赋值给emp对象的id属性
    @Options(useGeneratedKeys = true,keyProperty = "id")
    @Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) values (#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime})")
    public void insert(Emp emp);

}

(三)更新

在这里插入图片描述

(四)查询

  • 数据封装
    如果查询返回的结果中大部分字段是有值的,但是 deptId,createTime,updateTime 这几个字段是没有值的,而数据库中是有对应的字段值的,原因如下:

实体类属性名和数据库表查询返回的字段名一致,mybatis 会自动封装。
如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。

解决方案:

  1. 起别名
@Select("select id, username, password, name, gender, image, job, entrydate, " +
        "dept_id AS deptId, create_time AS createTime, update_time AS updateTime " +
        "from emp " +
        "where id=#{id}")
public Emp getById(Integer id);
  1. 结果映射
@Results({@Result(column = "dept_id", property = "deptId"),
          @Result(column = "create_time", property = "createTime"),
          @Result(column = "update_time", property = "updateTime")})
@Select("select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time from emp where id=#{id}")
public Emp getById(Integer id);
  1. 开启驼峰命名
    如果字段名与属性名符合驼峰命名规则,mybatis 会自动通过驼峰命名规则映射,要使用驼峰命名前提是 实体类的属性 与 数据库表中的字段名严格遵守驼峰命名。

驼峰命名规则: abc_xyz => abcXyz

  • 表中字段名:abc_xyz
  • 类中属性名:abcXyz

在application.properties中添加:
mybatis.configuration.map-underscore-to-camel-case=true

1. 直接查询

在这里插入图片描述

2. 条件查询

  • 方式一
@Mapper
public interface EmpMapper {
    @Select("select * from emp " +
            "where name like '%${name}%' " +
            "and gender = #{gender} " +
            "and entrydate between #{begin} and #{end} " +
            "order by update_time desc")
    public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
}

以上方式注意事项:

  1. 方法中的形参名和 SQL 语句中的参数占位符名保持一致

  2. 模糊查询使用${…}进行字符串拼接,这种方式呢,由于是字符串拼接,并不是预编译的形式,所以效率不高、且存在 sql 注入风险。

  • 方式二(解决 SQL 注入风险)
    • 使用 MySQL 提供的字符串拼接函数:concat(‘%’ , ‘关键字’ , ‘%’)
//条件查询
    @Select("select * from emp " +
            "where name like concat('%',#{name},'%') " +
            "and gender = #{gender}")
    public List<Emp> list(
            @Param("name") String name,
            @Param("gender") Short gender);
@Test
    public void testListByNameAndGender() {
        // 测试数据准备
        String name = "金庸";  // 模糊匹配名字包含"金庸"的记录
        Short gender = 1;     // 性别为男(1)

        // 执行查询
        List<Emp> empList = empMapper.list(name, gender);

        // 验证结果
        assertNotNull(empList, "查询结果不应为null");
        assertFalse(empList.isEmpty(), "查询结果不应为空");

        // 打印查询结果
        System.out.println("===== 查询结果 =====");
        empList.forEach(emp -> {
            System.out.println(emp);
            // 验证每条记录都满足查询条件
            assertTrue(emp.getName().contains(name), "姓名应包含: " + name);
            assertEquals(gender, emp.getGender(), "性别应为: " + gender);
        });

        // 验证特定记录是否存在
        boolean foundJinyong = empList.stream()
                .anyMatch(emp -> "金庸".equals(emp.getName()));
        assertTrue(foundJinyong, "应找到名为'金庸'的记录");
    }

执行结果:生成的 SQL 都是预编译的 SQL 语句(性能高、安全)

在这里插入图片描述

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

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

相关文章

贪心算法应用:集合覆盖问题详解

贪心算法与集合覆盖问题详解 贪心算法在组合优化问题中展现出独特优势&#xff0c;集合覆盖问题&#xff08;Set Cover Problem&#xff09;是其中的经典案例。本文将用2万字全面解析贪心算法在集合覆盖/划分中的应用&#xff0c;涵盖算法原理、正确性分析、Java实现、复杂度证…

【知识点】第7章:文件和数据格式化

文章目录 知识点整理文件概述文件的打开和关闭文件的读操作文件的写操作 练习题填空题选择题​​ 知识点整理 文件概述 文件是一个存储在辅助存储器上的数据序列&#xff0c;可以包含任何数据内容。概念上&#xff0c;文件是数据的集合和抽象&#xff0c;类似地&#xff0c;函…

NetSuite Bundle - Dashboard Refresh

儿童节快乐&#xff01; 今朝发一个Bundle&#xff0c;解决一个NetSuite Dashboard的老问题。出于性能上的考虑&#xff0c;NetSuite的Dashboard中的Portlet&#xff0c;只能逐一手工刷新。有人基于浏览器做了插件&#xff0c;可以进行自动刷新。但是在我们做项目部署时&#…

智慧赋能:移动充电桩的能源供给革命与便捷服务升级

在城市化进程加速与新能源汽车普及的双重推动下&#xff0c;移动充电桩正成为能源供给领域的一场革命。传统固定充电设施受限于布局与效率&#xff0c;难以满足用户即时、灵活的充电需求&#xff0c;而移动充电桩通过技术创新与服务升级&#xff0c;打破了时空壁垒&#xff0c;…

斐波那契数列------矩阵幂法

斐波那契数列 斐波拉楔数是我们在学递归的使用看到的题目&#xff0c;但递归法是比较慢的&#xff0c;后面我们用循环递进来写的&#xff0c;但今天我有遇到了新的方法—— 矩阵幂法&#xff08;线性代数的知识点&#xff09;。 矩阵幂法&#xff1a; F11*F10*F2; F20*F11*…

【Web应用】若依框架:基础篇21二次开发-页面调整

文章目录 ⭐前言⭐一、课程讲解⭐二、怎样选择设计模式&#xff1f;&#x1f31f;1、寻找合适的对象✨1) ⭐三、怎样使用设计模式&#xff1f;&#x1f31f;1、寻找合适的对象✨1) ⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内…

【 java 基础知识 第一篇 】

目录 1.概念 1.1.java的特定有哪些&#xff1f; 1.2.java有哪些优势哪些劣势&#xff1f; 1.3.java为什么可以跨平台&#xff1f; 1.4JVM,JDK,JRE它们有什么区别&#xff1f; 1.5.编译型语言与解释型语言的区别&#xff1f; 2.数据类型 2.1.long与int类型可以互转吗&…

CVE-2020-17518源码分析与漏洞复现(Flink 路径遍历)

漏洞概述 漏洞名称&#xff1a;Apache Flink REST API 任意文件上传漏洞 漏洞编号&#xff1a;CVE-2020-17518 CVSS 评分&#xff1a;7.5 影响版本&#xff1a;Apache Flink 1.5.1 - 1.11.2 修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0 漏洞类型&#xff1a;路径遍历导致的任…

Excel表格批量下载 CyberWin Excel Doenlaoder 智能编程-——玄武芯辰

使用 CyberWin Excel Downloader 进行 Excel 表格及各种文档的批量下载&#xff0c;优势显著。它能大幅节省时间&#xff0c;一次性获取大量所需文档&#xff0c;无需逐个手动下载&#xff0c;提升工作效率。可确保数据完整性与准确性&#xff0c;避免因重复操作产生失误。还便…

可编辑PPT | 基于大数据中台新能源智能汽车应用解决方案汽车大数据分析与应用解决方案

这份文档是一份关于新能源智能汽车应用解决方案的详细资料&#xff0c;它深入探讨了智能汽车行业的发展趋势&#xff0c;指出汽车正从单纯交通工具转变为网络入口和智能设备&#xff0c;强调了车联网、自动驾驶、智能娱乐等技术的重要性。文档提出了一个基于大数据中台的车企数…

k8s集群安装坑点汇总

前言 由于使用最新的Rocky9.5,导致kubekey一键安装用不了&#xff0c;退回Rocky8麻烦机器都建好了&#xff0c;决定手动安装k8s&#xff0c;结果手动安装过程中遇到各种坑&#xff0c;这里记录下&#xff1b; k8s安装 k8s具体安装过程可自行搜索&#xff0c;或者deepseek; 也…

从 Stdio 到 HTTP SSE,在 APIPark 托管 MCP Server

MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09; 是一种由 Anthropic 公司于 2024 年 11 月推出的开源通信协议&#xff0c;旨在标准化大型语言模型&#xff08;LLM&#xff09;与外部数据源和工具之间的交互。 它通过定义统一的接口和通信规则…

Mysql锁及其分类

目录 InnoDb锁Shared locks(读锁) 和 Exclusive locks(写锁)Exclusive locksShared locks Intention Locks(意向锁)为什么要有意向锁&#xff1f; Record Locks&#xff08;行锁&#xff09;Gap Locks&#xff08;间隙锁&#xff09;Next-Key LocksInsert Intention Locks(插入…

Postgresql源码(146)二进制文件格式分析

相关 Linux函数调用栈的实现原理&#xff08;X86&#xff09; 速查 # 查看elf头 readelf -h bin/postgres# 查看Section readelf -S bin/postgres (gdb) info file (gdb) maint info sections# 查看代码段汇编 disassemble 0x48e980 , 0x48e9b0 disassemble main# 查看代码段某…

【设计模式-4.11】行为型——解释器模式

说明&#xff1a;本文介绍行为型设计模式之一的解释器模式 定义 解释器模式&#xff08;Interpreter Pattern&#xff09;指给定一门语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;该解释器使用该表示来解释语言中的句子。解释器模式是一种…

【已解决】MACOS M4 芯片使用 Docker Desktop 工具安装 MICROSOFT SQL SERVER

1. 环境准备 确认 Docker Desktop 配置 确保已安装 Docker Desktop for Mac (Apple Silicon)&#xff08;版本 ≥ 4.15.0&#xff09;。开启 Rosetta&#xff08;默认开启&#xff09;&#xff1a; 打开 Docker Desktop → Settings → General → Virtual Machine Options …

Quipus系统的视频知识库的构建原理及使用

1 原理 VideoRag在LightRag基础上增加了对视频的处理&#xff0c;详细的分析参考LightRag的兄弟项目VideoRag系统分析-CSDN博客。 Quipus的底层的知识库的构建的核心流程与LightRag类似&#xff0c;但在技术栈的选择和处理有所不同。Quipus对于视频的处理实现&#xff0c;与Vi…

web3-去中心化金融深度剖析:DEX、AMM及兑换交易传播如何改变世界

web3-去中心化金融深度剖析&#xff1a;DEX、AMM及兑换交易传播如何改变世界 金融问题 1.个人投资&#xff1a;在不同的时间和可能的情况&#xff08;状态&#xff09;下积累财富 2.商业投资&#xff1a;为企业家和企业提供投资生产性活动的资源 目标&#xff1a;跨越时间和…

国芯思辰|SCS5501/5502芯片组打破技术壁垒,重构车载视频传输链路,兼容MAX9295A/MAX96717

在新能源汽车产业高速发展的背景下&#xff0c;电机控制、智能驾驶等系统对高精度信号处理与高速数据传输的需求持续攀升。 针对车载多摄像头与自动驾驶辅助系统对长距离、低误码率、高抗干扰性数据传输的需求&#xff0c;SCS5501串行器与SCS5502解串器芯片组充分利用了MIPI A…

压敏电阻的选型都要考虑哪些因素?同时注意事项都有哪些?

压敏电阻&#xff0c;英文名简称VDR&#xff0c;电子元器件中重要的成员之一&#xff0c;是一种非线性伏安特性的电阻器件&#xff0c;有电阻特性的同时&#xff0c;也拥有其他自身的特性&#xff0c;广泛应用于众多领域。在电源系统、安防系统、浪涌抑制器、电动机保护、汽车电…