mybatis(5)参数处理+语句查询
参数处理+语句查询
- 1、简单单个参数
- 2、Map参数
- 3、实体类参数
- 4、多参数
- 5、@Param注解
- 6、语句查询
- 6.1 返回一个实体类对象
- 6.2 返回多个实体类对象 List<>
- 6.3 返回一个Map对象
- 6.4 返回多个Map对象 List<Map>
- 6.5 返回一个大Map
- 6.6 结果映射
- 6.6.1 使用resultMap
- 6.6.2 驼峰式映射
1、简单单个参数
简单类型包括:
● byte short int long float double char
● Byte Short Integer Long Float Double Character
● String
● java.util.Date
● java.sql.Date
总而言之就是 mybaits可以自动匹配参数类型,之后通过setXXX来注入。
我们也可以显示标注类型,省去mybatis的类型匹配。
比如 char 类 我们可以通过parameterType 来告诉mybatis 参数类型是什么,其他基本数据类型都一样,不在举例。
<select id="selectbysex" resultType="student" parameterType="java.lang.Character">select *from t_student where sex=#{sex}</select>
2、Map参数
注意的是 我们传的如果是map,则我们#{map的key值},不能是其他的。
<select id="selectBYmap" resultType="student">select * from t_student where name=#{namekey} and age=#{agekey}</select>
@Testpublic void testMap(){SqlSession sqlSession = MybatisUtils.openSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);Map<String,Object> map=new HashMap<>();map.put("namekey","cky");map.put("agekey",18);mapper.selectBYmap(map).forEach(student -> System.out.println(student));sqlSession.close();}
3、实体类参数
注意:如果我们传的是实体类,则#{},{}里应该是实体类的属性名,不能是其他。
<select id="selectByclass" resultType="student">select * from t_student where name=#{name} and age=#{age}</select>
@Testpublic void testClass(){SqlSession sqlSession = MybatisUtils.openSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);Student student=new Student();student.setAge(18);student.setId(10L);student.setBirth(new Date());student.setHeight(1.65);student.setSex('女');student.setName("c");mapper.selectByclass(student).forEach(stu -> System.out.println(stu));sqlSession.close();}
4、多参数
传入多参数时,其实mybatis底层是帮我们封装成了map集合。
使用arg
List<Student> selectNameandSex2(String name, Character sex);
<select id="selectNameandSex2" resultType="student">select * from t_student where name=#{arg0} and sex=#{arg1}</select>
@Testpublic void testarg(){SqlSession sqlSession = MybatisUtils.openSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);mapper.selectNameandSex2("cky",'女').forEach(student -> System.out.println(student));sqlSession.close();}
使用param
<select id="selectNameandSex2" resultType="student">select * from t_student where name=#{param1} and sex=#{param2}</select>
两者联合使用
<select id="selectNameandSex2" resultType="student">select * from t_student where name=#{param1} and sex=#{arg1}</select>
这里例子 就等同于帮我们封装了一个map集合
map(“arg0”,“cky”);map(“arg1”,18);map(“param1”,“cky”);map(“param2”,18);
args从0开始,param参数从1开始。
两个都在map中。
5、@Param注解
如果我们想要使用自己标注的名字,就要使用@Param注解。
List<Student> selectNameandSex(@Param("name1") String name,@Param("sex1") Character sex);
<select id="selectNameandSex" resultType="student">select * from t_student where name=#{name1} and sex=#{sex1}</select>
使用了param注解,底层也是帮我们封装成了map集合,但是是将我们自己定义的名字封装为key,且这里argx不能再用,但是paramx仍可以使用。
就相当于帮我们封装成
map(“param1”,“cky”);map(“param2”,18);map(“name1”,“cky”);map(“sex1”,18);
6、语句查询
6.1 返回一个实体类对象
根据id查找时,我们查找的对象正好有对应的实体类,则我们可以直接返回一个实体类对象
<select id="selectByid" resultType="car">select * from t_car where id=#{id}</select>
@Testpublic void testid1(){SqlSession sqlSession = MybatisUtils.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);Car car = mapper.selectByid(2);System.out.println(car);sqlSession.close();}
6.2 返回多个实体类对象 List<>
<select id="selectAllCar" resultType="Car">select id,car_num,brand,guide_price,produce_time,car_type from t_car ;</select>
@Testpublic void tesr(){SqlSession sqlSession = MybatisUtils.openSession();//getMapper() 参数传入我们要代理的接口类 之后底层 会调用javassist 自动帮助我们生成 实现类 并将实现类返回 我们可以直接调用接口类的方法CarMapper mapper = sqlSession.getMapper(CarMapper.class);List<Car> cars = mapper.selectAllCar();cars.forEach(car -> System.out.println(car));sqlSession.close();}
6.3 返回一个Map对象
如果我们返回的对象在我们的项目中没有对应的实体类的话,我们可以使用map
Map<String,Object> selectByID(int id);
<select id="selectByID" resultType="map">select * from t_car where id=#{id}</select>
@Testpublic void test1(){SqlSession sqlSession = MybatisUtils.openSession();//getMapper() 参数传入我们要代理的接口类 之后底层 会调用javassist 自动帮助我们生成 实现类 并将实现类返回 我们可以直接调用接口类的方法CarMapper mapper = sqlSession.getMapper(CarMapper.class);Map<String, Object> map = mapper.selectByID(2);System.out.println(map);sqlSession.close();}
使用map接收时,其key就是数据库的列名,并不是我们类的列名
6.4 返回多个Map对象 List
List<Map<String,Object>> selectAllCar();
<select id="selectAllCar" resultType="map">select * from t_car ;</select>
@Testpublic void tesr(){SqlSession sqlSession = MybatisUtils.openSession();//getMapper() 参数传入我们要代理的接口类 之后底层 会调用javassist 自动帮助我们生成 实现类 并将实现类返回 我们可以直接调用接口类的方法CarMapper mapper = sqlSession.getMapper(CarMapper.class);List<Map<String, Object>> maps = mapper.selectAllCar();maps.forEach(car -> System.out.println(car));sqlSession.close();}
6.5 返回一个大Map
如果我们使用List
@MapKey("id")Map<Integer,Map<String,Object>> selectmyMap();
<select id="selectmyMap" resultType="map">select * from t_car</select>
@Testpublic void test2(){SqlSession sqlSession = MybatisUtils.openSession();//getMapper() 参数传入我们要代理的接口类 之后底层 会调用javassist 自动帮助我们生成 实现类 并将实现类返回 我们可以直接调用接口类的方法CarMapper mapper = sqlSession.getMapper(CarMapper.class);Map<Integer, Map<String, Object>> integerMapMap = mapper.selectmyMap();System.out.println(integerMapMap);sqlSession.close();}
结果是一个大的map
{2={car_num=1000, id=2, guide_price=1000000.00, produce_time=2000-11-11, brand=宝马100, car_type=燃油车},
3={car_num=102, id=3, guide_price=40.30, produce_time=2014-10-05, brand=丰田mirai, car_type=氢能源},
4={car_num=102, id=4, guide_price=40.30, produce_time=2014-10-05, brand=丰田mirai, car_type=氢能源},
7={car_num=1002, id=7, guide_price=100.00, produce_time=2023-03-28, brand=五菱11, car_type=电车},
8={car_num=1000, id=8, guide_price=100.00, produce_time=2024-04-09, brand=1, car_type=dianche},
9={car_num=1000, id=9, guide_price=100.00, produce_time=2024-04-09, brand=1, car_type=dianche}}
6.6 结果映射
查询结果的列名和java对象的属性名对应不上怎么办?
● 第一种方式:as 给列起别名
● 第二种方式:使用resultMap进行结果映射
● 第三种方式:是否开启驼峰命名自动映射(配置settings)
不知道为什么 ,我没有起过别名,也没有进行自动映射,但是如果我用一个实体类接收,他自动帮我转成了实体类的属性名。
6.6.1 使用resultMap
<!--resultMap:id:这个结果映射的标识,作为select标签的resultMap属性的值。type:结果集要映射的类。可以使用别名。
-->
<resultMap id="carResultMap" type="car"><!--对象的唯一标识,官方解释是:为了提高mybatis的性能。建议写上。--><id property="id" column="id"/><result property="carNum" column="car_num"/><!--当属性名和数据库列名一致时,可以省略。但建议都写上。--><!--javaType用来指定属性类型。jdbcType用来指定列类型。一般可以省略。--><result property="brand" column="brand" javaType="string" jdbcType="VARCHAR"/><result property="guidePrice" column="guide_price"/><result property="produceTime" column="produce_time"/><result property="carType" column="car_type"/>
</resultMap><!--resultMap属性的值必须和resultMap标签中id属性值一致。-->
<select id="selectAllByResultMap" resultMap="carResultMap">select * from t_car
</select>
6.6.2 驼峰式映射
是否开启驼峰命名自动映射
使用这种方式的前提是:属性名遵循Java的命名规范,数据库表的列名遵循SQL的命名规范。
Java命名规范:首字母小写,后面每个单词首字母大写,遵循驼峰命名方式。
SQL命名规范:全部小写,单词之间采用下划线分割。
比如以下的对应关系:
如何启用该功能,在mybatis-config.xml文件中进行配置:
<!--放在properties标签后面-->
<settings><setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
相关文章:

mybatis(5)参数处理+语句查询
参数处理+语句查询 1、简单单个参数2、Map参数3、实体类参数4、多参数5、Param注解6、语句查询6.1 返回一个实体类对象6.2 返回多个实体类对象 List<>6.3 返回一个Map对象6.4 返回多个Map对象 List<Map>6.5 返回一个大Map6.6 结果映射6.6.1 使用resultM…...

数据应用OneID:ID-Mapping Spark GraphX实现
前言 说明 以用户实体为例,ID 类型包含 user_id 和 device_id。当然还有其他类型id。不同id可以获取到的阶段、生命周期均不相同。 device_id 生命周期通常指的是一个设备从首次被识别到不再活跃的整个时间段。 user_id是用户登录之后系统分配的唯一标识ÿ…...

第6章 6.2.3 : readlines和writelines函数 (MATLAB入门课程)
讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。 MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 在MATLAB的文本数据处理任务中,导入和导出文件是常…...

Matlab应用层生成简述
基础软件层 目前接触到的几款控制器,其厂商并没有提供simulink的基础软件库一般为底层文件被封装为lib,留有供调用API接口虽然能根据API接口开发基础软件库,但耗费时间过长得不偿失 应用层 所以可以将应用层封装为一个子系统,其…...

每日一题(leetcode1702):修改后的最大二进制字符串--思维
找到第一个0之后,对于后面的子串(包括那个0),所有的0都能调上来,然后一一转化为10,因此从找到的第一个0的位置开始,接下来是(后半部分子串0的个数-1)个1,然后…...

PHP自助建站系统,小白也能自己搭建网站
无需懂代码,用 自助建站 做企业官网就像做PPT一样简单,您可以亲自操刀做想要的效果! 自助建站是一款简单、快捷、高效的工具,可以帮助您制作响应式网站。我们的自助建站系统,将传统的编码工作转化为直观的拖拽操作和文…...

计算机视觉 | 基于 ORB 特征检测器和描述符的全景图像拼接算法
Hi,大家好,我是半亩花海。本项目实现了基于 ORB 特征检测器和描述符的全景图像拼接算法,能够将两张部分重叠的图像拼接成一张无缝连接的全景图像。 文章目录 一、随机抽样一致算法二、功能实现三、代码解析四、效果展示五、完整代码 一、随机…...

Scala - 函数柯里化(Currying)
柯里化(Currying)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。 实例 首先我们定义一个函数: def add(x:Int,y:Int)xy 那么我们应用的时候,应该是这样用:add(1,2) 现在我们把这…...

Switch-case
Java switch case 语句 switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。 语法 switch case 语句语法格式如下: switch(expression){case value ://语句break; //可选case value ://语句break; //可选//你可以有任意数量…...

蓝桥杯-单片机基础16——利用定时计数中断进行动态数码管的多窗口显示
综合查阅了网络上目前能找到的所有关于此技能的代码,最终找到了下述方式比较可靠,且可以自定义任意显示的数值。 传统采用延时函数的方式实现动态数码管扫描,在题目变复杂时效果总是会不佳,因此在省赛中有必要尝试采用定时计数器中…...

2024/4/5—力扣—下一个排列
代码实现: 思路:两遍扫描 void swap(int *a, int *b) {int t *a;*a *b;*b t; }void reverse(int *nums, int l, int r) {while (l < r) {swap(nums l, nums r);l;r--;} }void nextPermutation(int *nums, int numsSize) {int i numsSize - 2;wh…...

xss.pwnfunction-Ugandan Knuckles
这个是把<>过滤掉了所以只能用js的事件 ?weya"onfocus"alert(1337)" autofocus"...

LabVIEW和2D激光扫描的受电弓滑板磨耗精确测量
LabVIEW和2D激光扫描的受电弓滑板磨耗精确测量 在电气化铁路运输中,受电弓滑板的健康状况对于保障列车安全行驶至关重要。受电弓滑板作为连接电网与列车的直接介质,其磨损情况直接影响到电能的有效传输及列车的稳定运行。精确、快速测量受电弓滑板磨损情…...

Linux第87步_阻塞IO实验
阻塞IO是“应用程序”对“驱动设备”进行操作,若不能获取到设备资源,则阻塞IO应用程序的线程会被“挂起”,直到获取到设备资源为止。 “挂起”就是让线程进入休眠,将CPU的资源让出来。线程进入休眠后,当设备文件可以操…...

C/C++基础----常量和基本数据类型
HelloWorld #include <iostream>using namespace std;int main() {// 打印cout << "Hello,World!" << endl;return 0; }c/c文件和关系 c和c是包含关系,c相当于是c的plus版本c的编译器也可以编译c语言c文件.cpp结尾.h为头文件.c为c语言…...

什么是生成式AI?有哪些特征类型
生成式AI是人类一种人工智能技术,可以生成各种类型的内容,包括文本、图像、音频和合成数据。那么什么是人工智能?人工智能和机器学习之间的区别是什么?有哪些技术特征? 人工智能是一门学科,是计算机科学的一…...

《Linux C/C++服务器开发实践》之第7章 服务器模型设计
《Linux C/C服务器开发实践》之第7章 服务器模型设计 7.1 I/O模型7.1.1 基本概念7.1.2 同步和异步7.1.3 阻塞和非阻塞7.1.4 同步与异步和阻塞与非阻塞的关系7.1.5 采用socket I/O模型的原因7.1.6(同步)阻塞I/O模型7.1.7(同步)非阻…...

SSH穿透ECS访问内网RDS数据库
处于安全考虑,RDS一般只会允许指定的IP进行访问,而我们开发环境的IP往往是动态的,每次IP变动都需要去修改RDS的白名单,为我们的工作带来很大的不便。 那么如何去解决这个问题? 假如我们有一台ESC服务器,E…...

python 有哪些函数
Python内置的函数及其用法。为了方便记忆,已经有很多开发者将这些内置函数进行了如下分类: 数学运算(7个) 类型转换(24个) 序列操作(8个) 对象操作(7个) 反射操作(8个) 变量操作(2个) 交互操作(2个) 文件操作(1个) 编译执行(4个) 装饰器(3个) …...

ubuntu web端远程桌面控制
本方案采用x11vncnovnc来实现x11vnc的安装和配置可以参考UOS搭建VNC及连接教程_uos安装vnc-CSDN博客;并把/lib/systemd/system/x11vnc.service内容修改为如下: [Unit]DescriptionStart x11vnc at startup.Aftermulti-user.target[Service]TypesimpleExecStart/usr/bin/x11vnc …...

PCL 点到三角形的距离(3D)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 给定三角形ABC和点P,设Q为描述ABC上离P最近的点。求Q的一个方法:如果P在ABC内,那么P的正交投影点就是离P最近的点Q。如果P投影在ABC之外,最近的点则必须位于它的一条边上。在这种情况下,Q可以通过计算线段AB、…...

C# wpf 嵌入外部程序
WPF Hwnd窗口互操作系列 第一章 嵌入Hwnd窗口 第二章 嵌入WinForm控件 第三章 嵌入WPF控件 第四章 嵌入外部程序(本章) 第五章 底部嵌入HwndHost 文章目录 WPF Hwnd窗口互操作系列前言一、如何实现?1、定义属性2、进程嵌入(1&…...

【ELK】ELK企业级日志分析系统
搜集日志;日志处理器;索引平台;提供视图化界面;客户端登录 日志收集者:负责监控微服务的日志,并记录 日志存储者:接收日志,写入 日志harbor:负责去连接多个日志收集者&am…...

详细的讲一下java的接口回调
Java的接口回调是一种允许程序在特定事件发生时通知其他对象的机制。这是观察者设计模式的一种实现方式,常用于实现事件监听和异步处理。接口回调允许对象之间进行松耦合的交互:一个对象只知道它可以调用另一个对象的方法,但它不需要知道这个…...

如何将powerpoint(PPT)幻灯片嵌入网页中在线预览、编辑并保存到服务器?
猿大师办公助手不仅可以把微软Office、金山WPS和永中Office的Word文档、Excel表格内嵌到浏览器网页中实现在线预览、编辑保存等操作,还可以把微软Office、金山WPS和永中Office的PPT幻灯片实现网页中在线预览、编辑并保存到服务器。 猿大师办公助手把本机原生Office…...

[Java基础揉碎]日期类
目录 日期类 第一代日期类 第二代日期类 第三代日期类 >前面两代日期类的不足分析 针对以上问题Java在jdk8加入了以下方法 jdk8的时间格式化 时间戳 第三代日期类更多方法 日期类 [知道怎么查,怎么用即可,不用每个方法都背] 第一代日期类 1) Date: …...

4.10作业
//.h文件#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> //定时器事件类 #include <QTime> //时间类 #include <QString> #include <QPushButton> //按钮类 #include <QLabel> //标签类 #include <QT…...

Hive概述与基本操作
一、Hive基本概念 1.什么是hive? (1)hive是数据仓库建模的工具之一 (2)可以向hive传入一条交互式的sql,在海量数据中查询分析得到结果的平台 2.Hive简介 Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS…...

安装 FFmpeg
安装 FFmpeg 1. Install FFmpeg On Ubuntu2. Install FFmpeg On Ubuntu 16.042.1. First add the repository2.2. Update the newly added repository2.3. Now install the ffmpeg2.4. For opening the ffmpeg for that type ffpmeg on the terminal 3. Uninstall ffmpegRefere…...

18、差分
差分 题目描述 输入一个长度为n的整数序列。 接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。 请你输出进行完所有操作后的序列。 输入格式 第一行包含两个整数n和m。 第二行包含n个整数,表示整…...