#{ }和${ } 、参数处理

目录

#{ }和${ } 

参数处理

入参-parameterType

使用Map

使用Bean / List<Bean>

使用多参数 

@Param注解(命名参数)

出参-resultType 

返回Map / List<Map>

返回Map<String,Map>

属性名不一致-resultMap结果映射


#{ }和${ } 

如果查找 carType=#{carType},carType=${carType}

        #{}:底层是PreparedStatement实现,会先编译再拼接。

                变成:type =' ',再把值传进去,即 type=' 燃油车 '。

        ${}:底层是Statement实现,会先拼接再编译 

                变成type=燃油车,会出现语法错误,因为燃油车应该添加单引号,'${carType}'

使用${}

1、给sql语句传关键字(asc|desc)

<select>select * from car order by carNum ${key}
</select>

2、sql语句字段拼接,字段名例如:字段+日期

<select>//传入dateselect * from monster_${date}
</select>

3、批量删除,有两种写法in和or(动态sql)

<delete>//传入字符串 “1,2,3”delete form monster where id in (${ids})
</delete>

4、模糊查询

<select>//在jdbc中,'%?%'中的?不会被识别为占位符//传入nameselect * from `monster` where `name` like '%${name}%'like concat('%',#{name},'%')like "%"#{name}"%"使用较多
</select>

参数处理

入参-parameterType

使用Map

#{} 里写的是map集合的key,如果key不存在不会报错,数据库表中会插入NULL

使用Bean / List<Bean>

#{} 里写的是get方法的方法名去掉get之后将剩下的单词首字母变小写

getAge对应的是#{age},get方法不存在会报错。

使用多参数 

List<Student> selectByNameAndSex(String name, Character sex);
<select id="selectByNameAndSex" resultType="student">select * from t_student where name = #{name} and sex = #{sex}
</select>

name参数找不到,可用的参数包括[arg1, arg0, param1, param2]

在底层会创建一个map集合,以arg0/param1为key,以方法上的参数为value

Map<String,Object> map = new HashMap<>();
map.put("arg0", name);
map.put("arg1", sex);
map.put("param1", name);
map.put("param2", sex);// 所以可以这样取值:#{arg0} #{arg1} #{param1} #{param2}
// 其本质就是#{map集合的key}

@Param注解(命名参数)

List<Student> selectByNameAndAge(@Param(value="name") String name, @Param("age") int age);
List<Student> stus = mapper.selectByNameAndAge("张三", 20);stus.forEach(student -> System.out.println(student));

@Param("这里填写的其实就是map集合的key")

出参-resultType 

返回Map / List<Map>

当返回的数据,没有合适的实体类,可以采用Map集合接收

只有一条数据,则返回一个Map集合即可

    @MapKey("id")public List<Map<String,Object>> find(Map<String, Object> map);
<select id="find" parameterType="map" resultType="map">select * from `monster` where `id` > #{id} and `salary` >= #{salary}
</select>
@Testpublic void m4() {Map<String, Object> map = new HashMap<>();map.put("id",3);map.put("salary",1000);List<Map<String,Object>> monsterlist = monsterMapper.find(map);for (Map<String, Object> monsterMap : monsterlist) {
//            方式一
//            Set<String> keys = monsterMap.keySet();
//            for (String key : keys) {
//                System.out.println(key+ " " + monsterMap.get(key));
//            }
//            System.out.println("===========");
//            方式二for(Map.Entry<String,Object> entry : monsterMap.entrySet()) {System.out.println(entry.getKey()+ " " + entry.getValue());}System.out.println("=========");}}

返回Map<String,Map>

@MapKey("id")  
public Map<Integer,Map<String,Object>> findAll();
@Testpublic void find() {HashMap<String, Object> map = new HashMap<>();map.put("type","women");Map<Integer, Map<String, Object>> all = monsterMapper.findAll(map);System.out.println(all);}

属性名不一致-resultMap结果映射

select查询后,某些字段为null,是因为Bean的字段名和表的字段名不一致  

第一种(常用)

resultMap:
            id:这个结果映射的标识,作为select标签的resultMap属性的值。
            type:结果集要映射的类。可以使用别名。

主键使用id标签<id property="id" column="id"/>提高效率,其他都是<result>

当属性名和数据库列名一致时,可以省略。但建议都写上。

<resultMap id="carResultMap" type="car"><id property="id" column="id"/><result property="useremail" column="user_email"/><result property="username" column="user_name"/>
</resultMap><select id="selectAllByResultMap" resultMap="carResultMap">select * from t_car
</select>

第二种

在写sql语句的时候写别名,跟Bean的字段名保持一致

第三种

开启驼峰命名自动映射

<settings><setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

前提:

        java命名规范:首字母小写,后面每个单词首字母大写,遵循驼峰命名规范

        sql命名规范:全部小写,单词之间采用下划线分割

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

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

相关文章

MySQL数据库——门诊管理系统数据库数据表

门诊系统数据库his 使用图形化工具或SQL语句在简明门诊管理系统数据库his中创建数据表&#xff0c;数据表结构见表2-3-9&#xff5e;表2-3-15所示。 表2-3-9 department&#xff08;科室信息表&#xff09; 字段名称 数据类型 长度 是否为空 说明 dep_ID int 否 科室…

Gin-vue-admin(4):项目创建前端一级页面和二级页面

目录 创建一级页面创建二级页面 创建一级页面 view目录下新建一个my&#xff0c;Index.vue <template></template><script> export default {name:My, } </script><script setup> import {ref} from vue const myNameref("name") &…

ABAP SQL 取日期+时间最新的一条数据

我们在系统对接的时候&#xff0c;外部系统可能会推送多个数据给到我们。 我们 SAP 系统的表数据中日期和时间是作为主键的&#xff0c;那么如果通过 ABAP SQL 取到最新日期的最新时间呢。 解决方案&#xff1a; 方式 1&#xff1a;SELECT MAX 可以通过两个 SELECT MAX 来取…

【面试 - 遇到的问题】Vue 里 router-view 使用 key + 关闭页面后重新打开页面-获取的数据赋值到旧组件问题(钩子执行顺序)

目录 【1】问题描述【2】问题排查前 - 页面渲染、tag 页签渲染 逻辑梳理页面渲染【借用别人的描述】<router-view :key"key" />1. 不设置key 属性2. 设置 key 属性值为 $route.path/page/1 > /page/2/page?id1 > /page?id2, 3. 设置 key 属性值为 $rou…

应该连续学一个科目,还是多学科切换?

https://www.zhihu.com/question/333420829https://www.zhihu.com/question/333420829

excel 使用vlook up找出两列中不同的内容

当使用 VLOOKUP 函数时&#xff0c;您可以将其用于比较两列的内容。假设您要比较 A 列和 B 列的内容&#xff0c;并将结果显示在 C 列&#xff0c;您可以在 C1 单元格中输入以下公式&#xff1a; 这个公式将在 B 列中的每个单元格中查找是否存在于 A 列中。如果在 A 列中找不到…

2024159读书笔记|《南山册页:齐白石果蔬册鱼虫册》节选

2024159读书笔记|《南山册页&#xff1a;齐白石果蔬册&鱼虫册》节选 1. 《南山册页&#xff1a;齐白石鱼虫册》2. 《南山册页&#xff1a;齐白石果蔬册》 1. 《南山册页&#xff1a;齐白石鱼虫册》 《南山册页&#xff1a;齐白石鱼虫册》南山书画&#xff0c;大家之作&…

【AI驱动的数据结构:包装类的艺术与科学】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 包装类装箱和拆箱阿里巴巴面试题 包装类 在Java中基本数据类型不是继承来自Object&#xff0c;为了…

Nginx 双向链表 ngx_queue_t

目录 一、基本概述 二、数据结构 三、接口描述与实现 1、相关宏接口 2、ngx_queue_middle 3、ngx_queue_sort 四、使用案例 整理自 nginx 1.9.2 源码 和 《深入理解 Nginx&#xff1a;模块开发与架构解析》 一、基本概述 双向链表的优势是可以快速进行数据插入、删除与…

亚信安全春节14天双倍假期通告

亚信安全14天双倍假期来袭 “网安福利王”再次实至名归 2024年 8773小时&#xff0c;31582680秒 亚信安全一直驰骋于云网安世界 奋战在“安全 数智化”的壮阔征途上 如今&#xff0c;新春的脚步渐近 长达14天的春节长假 能让我们暂且放下忙碌的工作 去除班味&#xff0c…

【时间之外】IT人求职和创业应知【71】-专利费

目录 2025 ICT产业趋势年会召开&#xff0c;2024年度ICT十大新闻重磅揭晓 海纳致远数字科技申请定制化插件驱动的数据分析专利 阿波罗智联取得语音数据的处理方法、装置、设备和存储介质专利 心勿贪&#xff0c;贵知足。 感谢所有打开这个页面的朋友。人生不如意&#xff0…

游戏《姆吉拉的假面》启动时提示“xinput1_3.dll丢失”怎么办?“xinput1_3.dll丢失”要怎么解决?

《姆吉拉的假面》报错&#xff1a;xinput1_3.dll丢失&#xff1f;这里有解决之道&#xff01; 在畅游《姆吉拉的假面》这款经典游戏时&#xff0c;你是否遇到过“xinput1_3.dll丢失”的报错信息&#xff1f;这个错误不仅会影响你的游戏体验&#xff0c;还可能让你陷入无法继续…

数据分析实战—鸢尾花数据分类

1.实战内容 (1) 加载鸢尾花数据集(iris.txt)并存到iris_df中,使用seaborn.lmplot寻找class&#xff08;种类&#xff09;项中的异常值&#xff0c;其他异常值也同时处理 。 import pandas as pd from sklearn.datasets import load_iris pd.set_option(display.max_columns, N…

hive注释comment中文乱码解决

问题描述 当使用以下命令查看表的元数据信息时出现中文乱码&#xff08;使用的是idea连接hive&#xff09; desc formatted test.t_archer; 解决 连接保存hive元数据的MySQL数据库&#xff0c;执行以下命令&#xff1a; use hive3; show tables;alter table hive3.COLUMNS_…

maven项目运行时NoSuchMethodError问题排查记录(依赖冲突解决)

控制台异常如下&#xff1a; Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: org.apache.commons.io.input.BoundedInputStream.builder()Lorg/apache/commons/io/input/BoundedInputStream$Builder;问题明显&#xff0c;根据NoSuchMethodError…

java 选择排序,涵盖工作原理、算法分析、实现细节、优缺点以及一些实际应用场景

选择排序的详细解析 更深入地探讨选择排序的各个方面&#xff0c;包括其工作原理、算法分析、实现细节、优缺点以及一些实际应用场景。 动画演示 1. 基本概念 选择排序是一种简单的比较排序算法。它的核心思想是将数组分为两个部分&#xff1a;已排序部分和未排序部分。每…

矩阵-向量乘法的行与列的解释(Row and Column Interpretations):中英双语

本文是学习这本书的笔记 网站是&#xff1a;https://web.stanford.edu/~boyd/vmls/ 矩阵-向量乘法的行与列的解释 矩阵-向量乘法&#xff08;Matrix-Vector Multiplication&#xff09;是线性代数中的基本操作&#xff0c;也是机器学习、数据科学和工程中常用的数学工具。本文…

基于海思soc的智能产品开发(巧用mcu芯片)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于开发车规级嵌入式软件的同学来说&#xff0c;socmcu这样的组合&#xff0c;他们并不陌生。但是传统的工业领域&#xff0c;比如发动机、医疗或…

带有 Elasticsearch 和 Langchain 的 Agentic RAG

作者&#xff1a;来自 Elastic Han Xiang Choong 讨论并实现 Elastic RAG 的代理流程&#xff0c;其中 LLM 选择调用 Elastic KB。 更多阅读&#xff1a;Elasticsearch&#xff1a;基于 Langchain 的 Elasticsearch Agent 对文档的搜索。 简介 代理是将 LLM 应用于实际用例的…

SmartX分享:NVMe-oF 介绍、SMTX ZBS 如何选择高性能场景解决方案与如何实现

目录 背景什么是 NVMe-oFZBS AccessiSCSI 与 iSERNMVe-oF 介绍NVMeNVMe-oFNVMe-oF 承载网络&#xff08;数据平面&#xff09; ZBS NVMe-oF 实现ZBS 接入策略ZBS 接入点分配策略性能测试 为什么要支持 RoCE引用 背景 前几篇文章&#xff0c;我们认识到了 SmartX 公司产品 SMTX…