MyBatis案例 | 使用映射配置文件实现CRUD操作——通过主键查询对应数据

news2024/10/6 10:33:01

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏
本专栏地址:🔥JavaWeb
Java入门篇: 🔥Java基础学习篇
Java进阶学习篇(持续更新中):🔑Java进阶学习篇

在这里插入图片描述
从本文开始将讲述有关于如何使用MyBatis完成增删查改的操作,预计本系列文章会有以下这些文章,在写完本系列的文章后会有一篇文章罗列这些文章以及其地址(传送门)小伙伴们直接点击查看即可

文章名称文章地址
查询所有数据使用映射配置文件实现CRUD操作——查询所有数据
查询详情
添加数据
修改全部字段
修改动态字段
删除一条数据
批量删除数据

文章目录

  • 一、前言
  • 二、参数占位符
    • 1.概述
    • 2.演示
  • 三、通过主键查询该条数据
    • 1.BrandMapper接口
    • 2.BrandMapper.xml文件
    • 3.测试类
  • 四、结语

一、前言

本文将讲述一个业务场景:有些数据的属性比较多,在页面表格中无法全部实现,而只会显示部分,而其他属性数据的查询可以通过 查看详情 来进行查询。而查询详情是通过主键(id)来查询对应的那条数据

二、参数占位符

1.概述

mybatis提供了两种参数占位符

  • #{} :执行SQL时,会将 #{} 占位符替换为?,将来自动设置参数值,使用#{} 底层使用的是 PreparedStatement

  • ${} :拼接SQL,底层使用的是 Statement,会存在SQL注入问题

2.演示

由于这里测试用例还没有介绍,所以只要看一下结果,了解一下两者的区别就好

#{}占位符
这里可以看到占位符替换为?,将来自动设置参数值,可以有效防止SQL注入问题
在这里插入图片描述
${}占位符
这里直接把我们传输过去的数据直接拼接到SQL语句上
在这里插入图片描述

三、通过主键查询该条数据

1.BrandMapper接口

这里我们定义一个selectById的方法,并且在括号内传递参数(id),再用一个Brand对象去接收它。因为一个id对应的只有一条数据,所以这里不用定义一个List集合,只需要一个Brand对象即可

Brand selectById(int id);

2.BrandMapper.xml文件

这里我们依然使用字段映射的方法来将表内字段名和Java中成员属性变为一致,由于我们不知道用户会输入的id会是多少,所以这里要用占位符,对比上面两种占位符,我们选择使用#{}来作文映射文件中的占位符,在{}内写上需要传递的参数(Java的成员属性)

    <!--字段映射,不用起别名-->
    <resultMap id="brandResultMap" type="Brand">
        <!--
         id:主键字段的映射,result:一般字段的映射
         column:列,property:实体类的属性名
        -->
        <result column="brand_name" property="brandName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>
    
    <!--statement-->
    <select id="selectById" resultMap="brandResultMap">
        select
        *
        from tb_brand
        where id = #{id};
    </select>

3.测试类

这里整体与前文差不多,但是要自定义一个id(因为目前没有学习到如何从页面捕获用户输入的id)然后在selectById方法的括号内传入即可

public class MyBatisTest2_selectById {
    @Test
    public void SelectById() throws IOException {
        int id = 1;

        //加载MyBatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);


        //SqlSession获取对象
        SqlSession sqlSession = sqlSessionFactory.openSession();


        //获取BrandMapper接口代理对象
        BrandMapper brandMapper= sqlSession.getMapper(BrandMapper.class);

        //执行方法
        Brand brand = brandMapper.selectById(id);

        //打印结果
        System.out.println(brand);

        //释放资源
        sqlSession.close();
    }
}

Brand{id=1, brandName=‘三只松鼠’, companyName=‘三只松鼠股份有限公司’, ordered=5, description=‘好吃不上火’, status=0}

四、结语

本文讲了一个简易版单条件查询,是简简单单的的开胃小菜,接下来会讲述多条件查询,也就是动态SQL部分,这才是重头戏部分

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

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

相关文章

关于Linux中断的相关查询

1.linux 内核 /proc/interrupts 在 /proc/interrupts 文件中记录了 Linux 内核的中断信息&#xff0c;我们可以通过命令查看 sudo cat /proc/interrupts 文件中以表格的形式列举出来所有的内核中断&#xff0c;其表头信息标注如下&#xff1a; 我们可以通过特定任务执行时…

计算机SCI论文一定要在指定的机构润色吗? - 易智编译EaseEditing

不一定要在指定的机构润色。 首先期刊要求润色&#xff0c;是非常正常的事情。国人投的中文论文&#xff0c;有的也会被要求润色。 更不要说国外的英文期刊了&#xff0c;咱们写的英文文章投过去&#xff0c;大部分都会被要求润色的。 为什么期刊总是要求润色语言呢&#xff…

Windows7操作系统安全(3)

实验简介 实验所属系列&#xff1a;网络安全实践 实验对象&#xff1a; 本科/专科信息安全专业 相关课程及专业&#xff1a;计算机基础&#xff0c;Linux基础 实验时数&#xff08;学分&#xff09;&#xff1a;2学时 实验类别&#xff1a;实践实验类预备知识 Windows系列是目…

Oracle重建控制文件

利用trace文件重建控制文件 1、生成trace文件&#xff1a; SQL>alter database backup controlfile to trace;2、找到生成的trace文件&#xff1a; SQL>show parameter user_dump_destuser_dump_dest 文件对应的路径即为trace文件的路径 3、关闭数据库 SQL>shutdo…

VueJS 之模板引用

文章目录参考描述模板引用引用访问模板引用组件中的模板引用$nextTick()示例updated错误示范正确演示$nextTick()参考 项目描述搜索引擎Bing哔哩哔哩黑马程序员VueJS 官方文档模板引用 描述 项目描述Edge109.0.1518.70 (正式版本) (64 位)操作系统Windows 10 专业版vue/cli5.…

jvm相关,jvm内存溢出,内存占用过高,CPU占用率高原因分析,MAT内存镜像文件分析的使用----学习笔记

什么是内存泄漏? 什么是内存溢出 内存溢出: OutOfMemory 它是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;抛出 OutOfMemory 错误 内存泄露: Memory Leak 它是指程序运行后&#xff0c;没有释放所占用的内存空间&#xff0c;比如程序运行完后没有释…

数据库和SQL初探

数据库和SQL初探1. 什么是数据库2. 数据库的结构3. MySQL表定义相关操作4. MySQL体系结构和存储引擎1. 什么是数据库 将大量数据保存起来&#xff0c;通过计算机加工而成的可以进行高效访问的数据集合。用来管理数据库的计算机系统称为数据库管理系统(DatabaseManagementSyste…

Java面试题二(自用-持续更新)

本文目录如下&#xff1a;Java面试题(二)四、并发编程线程和进程的区别&#xff1f;守护线程是什么&#xff1f;创建线程有哪几种方式&#xff1f;线程有哪些状态&#xff1f;sleep() 和 wait() 有什么区别&#xff1f;线程的sleep()方法和yield()方法有什么区别&#xff1f;线…

我发现买不起自己出版的书了,这到底是咋回事?

大家好&#xff0c;我是冰河~~ 这次我是真的有点买不起自己的书了&#xff01; 聊聊背景 继出版《海量数据处理与大数据技术实战》、《MySQL技术大全&#xff1a;开发、优化与运维实战》和《深入理解分布式事务&#xff1a;原理与实战》之后&#xff0c;冰河于2022年6月出版…

基于uni-app的小程序电子签名功能(带有笔锋)

前言 目前做的一个项目需要用到电子签名的功能&#xff0c;网上其实也挺多这种类型的电子签名&#xff0c;但是带有笔锋效果的确比较少&#xff0c;所以参考了一些博客&#xff0c;总结成了这个功能&#xff0c;在此分享给大家。 效果展示 代码展示 触摸开始&#xff08;touc…

大数据专业需要学习python么

如果零基础入门数据开发行业的小伙伴&#xff0c;可以从Python语言入手。 Python语言简单易懂&#xff0c;适合零基础入门&#xff0c;在编程语言排名上升最快&#xff0c;能完成数据挖掘、机器学习、实时计算在内的各种大数据集成任务。 但是不会python也是没有关系的&#…

基于Vector VT系统的车身域测试方案介绍

车身域控制器作为车身主要部件的控制大脑&#xff0c;需要经过严苛的测试&#xff0c;常见的测试方式是通过搭建硬件在环测试系统实现的&#xff0c;测试原理是通过仿真控制器外围的传感器和执行器&#xff0c;实现车身域控制器的闭环仿真和测试。小怿基于国际一流的测试设备提…

Day15 C++STL入门基础知识九——list容器 基本概念-构造函数-赋值变换-大小操作-插入删除-数据存取-反转排序 【全面深度剖析+例题代码展示】

文章目录1. 基本概念1.1 功能1.2 概念1.3 组成和存储方式1.4 优缺点1.4 图解2. 构造函数2.1 函数原型2.2 代码展示2.3 测试结果3. 赋值交换3.1 函数原型3.2 代码展示3.3 测试结果4. 大小操作1.3 代码展示1.4 测试结果6. 插入删除6.1 函数原型6.2 代码展示6.3 测试结果7. 数据存…

React报错#310复盘小结

React报错#310复盘小结问题背景解决方案原理&学习引发错误情况1. 不要在循环&#xff0c;条件或嵌套函数中调用 Hook2. 把所有的钩子移到组件的顶层&#xff0c;在任何可能返回值的条件之上。总结问题背景 apm报错&#xff1a;Minified React error #310 https://reactjs.…

浅谈Graph Embedding(一)

Graph Embedding算法背景引入先回顾下图的概念&#xff1a;图(graph)由节点(vertex)和点之间连线(edge)所组成&#xff1b;其中&#xff0c;点通常被成为“顶点(vertex)”,而点与点之间的连线则被成为“边”(edge)。通常记为,G(V,E)。常见分为无向图和有向图。示例如下&#xf…

MySQL数据类型约束

文章目录数据类型MySQL中的数据类型整数类型类型介绍可选属性MUNSIGNEDZEROFILL适用场景如何选择&#xff1f;浮点类型类型介绍数据精度说明精度误差说明定点数类型类型介绍开发中经验位类型&#xff1a;BIT6. 日期与时间类型YEAR类型DATE类型TIME类型DATETIME类型TIMESTAMP类型…

小白入门pwn笔记 CPU与进程的执行

1.回顾存储在磁盘中的叫节&#xff0c;映射到内存的时候叫段。内存中的节根据读写执行的权限不同在内存中映像为不同的段。段视图用于进程的内存区域的rwx权限划分。节视图用于ELF文件编译链接时与在磁盘上储存时的文件结构的组织。2.代码在内存重的映射关系不可写的数据一般会…

Qt OpenGL(三十六)——Qt OpenGL 核心模式-绘制雷达坐标系

提示:本系列文章的索引目录在下面文章的链接里(点击下面可以跳转查看): Qt OpenGL 核心模式版本文章目录 Qt OpenGL(三十六)——Qt OpenGL 核心模式-绘制雷达坐标系 一、场景 在日常的项目中,我们很多时候会遇到,绘制雷达扫描图的情况,比如,你的项目是给下面的雷达…

unidbg-boot-server使用并打包jar调用

其实线上使用可以多种方式,比如pom引入spring boot自己去写一个接口实现; 但如果并发不是很高,可以使用synchronized关键字进行,若对并发有要求,建议直接使用 unidbg-boot-server开源项目; 从github下拉,https://github.com/anjia0532/unidbg-boot-server 常见问题:…

Neo-reGeorg测试

1、前言 趁着春节刚开工不太忙&#xff0c;把以前的坑填一下。 主要是针对反向代理、隧道工具进行学习和测试。 之前测试过FRP&#xff0c;HTTPTunnel&#xff0c;NPS&#xff0c;都比较简单&#xff0c;而且上面工具也可以用在普通需求下使用。 reGeorg和Neo-reGeorg非常适合…