day03 MyBatis 核心

news2024/11/23 2:34:24

mapper接口和原理

之前的持久层组成部分:UserMapper.xml+IUserDAO+UserDAOimpl

使用mapper接口:UserMapper.xml+UserMaper接口

mapper接口的好处;

避免持久层里面传入参数错误:以前里面写错了不会报错,只有等到运行代码才能看到错误,第二个参数的类型是Objiect

MAPPer使用注意

1.mapper接口的命名为xxxMapper,包的路径和对应的xml文件的路径相同,编译后的路径相同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lj9OHtNc-1684997920735)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230503150259299.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tDwffjcE-1684997920737)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230503150312472.png)]

2.xml命名空间使用对应xxxmapper接口的权限定名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TO8R9nHF-1684997920738)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230503150537670.png)]

3.mapper 接口方法名和mapper.xml文件中的(select | update | delete | insert)id值一样

xml文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KNyNJHDm-1684997920739)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230503152734887.png)]

mapper文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OcPqv2vr-1684997920739)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230503152801372.png)]

4.方法返回的类型对应xml中 resultType / resultMap 类型

5.方法的参数类型对应 SQL 元素中定义的 paramterType 类型(一般不写)。

在测试中使用mapper接口

@Test
public void get() {
    SqlSession session = MybatisUtil.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    System.out.println(mapper.get(1L));
    session.close();
}

注意:mapper.get是中的get是mapper接口中的方法名,里面的传的值的类型由接口进行规定

mapper接口原理

底层就是mybatis使用动态代理来创建mapper的实现类对象

底层的操作方式和以前一样

使用mapper进行多条件查询

使用多条件的时候,mybatis会将多个条件进行封装成map集合(arg0,arg1,param1,param2),

此时在xml中的select语句直接使用username=#{username} and password=#{password}就会出错

解决办法:在xxxMapper中加上@param注解,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nLImMwC8-1684997920740)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230503161637126.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QnZxj1u2-1684997920741)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230503161618315.png)]

Mybatis中的#和$的区别

1.相同点

都可以获取map或者javabean中的对象信息

2.不同点

(1)**#会将所有传过来的任何类型的参数加上单引号,$**不会自动加上,只能手动在传参数那里加单引号,否则将传过来的参数作为SQL语句的一部分

(2)#可以防止sql注入问题(preparaStatement),安全,$不安全

(3)#支持将简单类型(string int)作为参数值,$不行

Mybatis中的动态sql:if和where

**使用地方:**进行多条件判断的时候

xml中的if作用

test里面的是一个boolean表达式

xml中的where作用

满足条件就将where加进去,不满足条件的就不将where进行拼接

where和if联合使用,使用CDATA进行包裹运算符,或者使用转义符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7VzFHvDG-1684997920742)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230503190758002.png)]

Mybatis中的动态sql:set

使用set可以防止修改数据的时候丢失数据,当某个属性传入的值为null的时候,会丢失数据

set和if配合进行使用,在if的外层加上set

**注意事项:**修改的时候mapper接口不能返回任何类型,否则报错,弄一个测试类进行测试

xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-peWEaOxT-1684997920742)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230503203550475.png)]

mapper接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5IfLo17G-1684997920743)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230503205731007.png)]

测试类

 @Test
    public  void update(){
    SqlSession session = MybatisUtil.getSession();
    EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
    Employee employee = new Employee();
    employee.setSalary(new BigDecimal(1300));
    employee.setId(1L);
    mapper.update(employee);
    session.commit();
    session.close();
}

Mybatis中的动态sql:foreach

使用地方:批量删除的时候,使用的数组或者集合进行删除就使用foreach遍历进行删除

注意事项:编写mapper接口的时候需要增加一个注解,否则一个数组xml问津不能进行识别

xml文件

<delete id="delete" >
    delete from employee
    where id in
        <!--
        collection:需要遍历的数组或者集合
        open:开始拼接的字符串
        item:遍历后元素的别名
        separatotor:遍历元素后使用的分隔符
        close:遍历结束拼接的字符串
        -->
        <foreach collection="ids" open="(" item="id" separator="," close=")">
            #{id}
        </foreach>
</delete>

mapper接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t06bZELT-1684997920744)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230503205546291.png)]

测试类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BbYOftJk-1684997920745)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230503205617420.png)]

id}


mapper接口

[外链图片转存中...(img-t06bZELT-1684997920744)]

测试类

[外链图片转存中...(img-BbYOftJk-1684997920745)]























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

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

相关文章

GC之查看GC日志

写在前面 本文一起看下如何查看GC日志。 1&#xff1a;环境准备 为了能更模拟真实的业务环境生成GC日志&#xff0c;我们首先来准备一个测试类&#xff0c;详细的注释已经在代码中&#xff0c;如下&#xff1a; import java.util.Random; import java.util.concurrent.TimeU…

从RE到RSE:聊聊无线产品EMC认证测试中的辐射项(上)

无线产品的EMC认证测试里&#xff0c;有两个与辐射发射有关的项目&#xff1a;Radiated Emission&#xff08;RE&#xff09;和Radiated Spurious Emission&#xff08;RSE&#xff09;。 RE和RSE&#xff0c;名字上仅一字之差&#xff0c;测试结果看起来也仿佛孪生哥俩。下面有…

unity四叉树和视锥体剔除

这个最好还是看代码&#xff0c;项目有注释放在这里&#xff1a; GetbadEarlyup/Quadtree-cone-scene: 这是一个unity四叉树场景视锥体剔除的Demo (github.com)https://github.com/GetbadEarlyup/Quadtree-cone-scene国内地址&#xff1a; Quadtree-cone-scene: unity四叉树和…

【接口测试】JMeter测试WebSocket接口

目录 一、WebSocket简介 二、JMeter测试WebSocket接口 三、WebSocket和Socket的区别 最近老被问到WebSocket&#xff0c;突然想到以前大学时上Java课的时候&#xff0c;老师教我们socket连接&#xff0c;一个同学电脑做客户端&#xff0c;一个同学电脑做服务端&#xff0c;…

软件测试的风险主要体现在哪里

软件测试的风险主要体现在哪里 在软件开发中&#xff0c;测试是至关重要的一环&#xff0c;它能够帮助我们及时发现和解决问题&#xff0c;提高软件质量&#xff0c;但同时也存在着一些风险。 首先&#xff0c;测试不充分可能导致漏洞存在。如果测试人员没有覆盖到某些场景或者…

怎么买美股?如何选择美股交易订单类型?

怎么买美股&#xff0c;前文说的开立美股账户只是基础的一步。在正式开始美股交易前&#xff0c;还有许多准备工作需要完成&#xff0c;其中就包括选择美股交易订单类型。市场上的美股交易订单类型有哪些&#xff1f;如何选择适合自己的美股交易订单类型&#xff1f; 美股交易订…

Matlab论文插图绘制模板第94期—带置信区间的折线散点图

在之前的文章中&#xff0c;分享了很多Matlab带置信区间的折线图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下带置信区间的折线散点图的绘制模板。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友…

档案馆空气质量在线3D监控系统温湿度方案

档案馆库房八防温湿度空气质量一体化解决方案 档案库房是档案事业发展的基石&#xff0c;其主要任务是集中保管国家机构及个人等在各种形式下形成的具有一定价值和保存价值的各种载体档案&#xff0c;主要包括文书档案、科技档案、会计档案、人事档案、实物档案等。随着我国经济…

chatgpt赋能python:Pythonsavefig的保存路径在哪里?

Python savefig的保存路径在哪里&#xff1f; 如果你是一位拥有10年Python编程经验的工程师&#xff0c;你肯定知道Python的可视化库&#xff08;matplotlib&#xff09;是一个非常有用的工具&#xff0c;能够帮助我们将数据转化为直观的图表&#xff0c;以便更好地展示和理解…

02 Maven创建及使用

maven作用 主要用作基于java平台的项目 maven能提供一种项目配置 maven能自动从maven的中央仓库帮我们自动下载并管路项目依赖的jar包 提供了标准的目录结构 中央仓库两种类型:共有的中央仓库:私有中央仓库 使用mvn -v查看是否安装成功 修改本地仓库的的位置 在setting…

LeetCode链表题?来让我帮你图解剖析

&#x1f490;文章导读 本篇文章主要详细的用图解的方式为大家讲解了简单程度的链表题&#xff0c;如果题中有错误的地方&#xff0c;还麻烦您在评论区指出&#xff0c;你的意见就是我最大的进步&#xff01;&#xff01;&#xff01; &#x1f490;专栏导读 &#x1f934;作者…

免费用GPT4方法,速看可能会被删

介绍4种免费使用GPT4的方法&#xff0c;最后一个目前能多轮对话基本没限制。 1. forefront https://chat.forefront.ai/ 不登陆只能用GPT3.5&#xff0c;登陆后可以使用GPT4&#xff08;每3小时5条消息&#xff09; 2、poe https://poe.com/GPT-4 登陆后&#xff0c;每天…

【追梦之旅】—— 手“C”二叉树~

【追梦之旅】—— 手“C”二叉树~&#x1f60e; 前言&#x1f64c;什么是二叉树&#xff1f;&#xff01;特殊的二叉树二叉树的性质二叉树的存储结构二叉树链式结构的实现二叉树的链式结构&#xff1a;二叉树的创建。 二叉树的遍历前序遍历&#xff08;先根遍历&#xff09;中序…

java springboot yml文件配置 多环境yml

如果是properties改用yml&#xff0c;直接改后缀&#xff0c;原文件中的配置语法改用yml的语法即可&#xff0c;系统会自动扫描application.properties和application.yml文件&#xff08;注意&#xff1a;改了之后需要maven 命令 clean一下&#xff0c;清个缓存&#xff09;。 …

VSOMEIP3抓包数据

环境 $ cat /etc/os-release NAME"Ubuntu" VERSION"20.04.6 LTS (Focal Fossa)" IDubuntu ID_LIKEdebian PRETTY_NAME"Ubuntu 20.04.6 LTS" VERSION_ID"20.04" HOME_URL"https://www.ubuntu.com/" SUPPORT_URL"https:/…

简洁灵活工单管理系统,支持工单模版字段、工单状态自定义

一、开源项目简介 本项目为FeelDesk工单管理系统的开源版&#xff08;OS&#xff09;&#xff0c;是基于开发者版&#xff08;DEV&#xff09;分离的标准版&#xff1b;支持工单模版字段、工单状态等自定义&#xff0c;可为不同的模版设置不同的路由规则&#xff1b;对工单需求…

信号在MATLAB中的运算——信号的相加相乘

信号在MATLAB中的运算——信号的相加相乘 信号的相加和相乘是指同一时刻信号取值的相加和相乘。 对于离散序列来说&#xff0c;序列相加是将信号对应时间序列的值逐项相加&#xff0c;在这里不能像连续时间信号那样用符号运算来实现&#xff0c;而必须用向量表示的方法&#…

Python获取北上广深历史天气数据并做数据可视化

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 知识点: 动态数据抓包 requests发送请求 结构化非结构化数据解析 开发环境: 开发环境: python 3.8 运行代码 pycharm 2022.3.2 辅助敲代码 专业版 模块使用&#xff1a; requests 发送请求 pip install requests par…

2.2.2 部署Master节点、添加Node节点

2.2.2 部署Master节点 1.安装docker、kubeadm、kubelet、kubectl 前面我们已经完成了虚拟机中系统的初始化&#xff0c;下面我们就在我们所有的节点上安装docker、kubeadm、kubelet、kubectl。 Kubernetes默认CRI&#xff08;容器运行时&#xff09;为Docker&#xff0c;因此…

【JavaScript】拾遗(5.25)

文章目录 1. JavaScript2.HTML嵌入JS的第一种方式:行间事件3.HTML嵌入JS的第二种方式:脚本块的方式4. HTML嵌入JS的第三种方式:外部式(外链式)5. 局部变量和全局变量6. 函数7.事件8.回调函数8.1 注册事件8.2 代码的执行顺序 1. JavaScript JavaScript是一门脚本语言。&#xf…