当前位置: 首页 > news >正文

Mybatis --- 获取参数值和查询功能

一、MyBatis的增删改查

1.1、新增

<!--int insertUser();-->
<insert id="insertUser">insert into t_user values(null,'admin','123456',23,'男')
</insert>

 

1.2、删除

<!--int deleteUser();-->
<delete id="deleteUser">delete from t_user where id = 1
</delete>

 

1.3、修改

<!--int updateUser();-->
<update id="updateUser">update t_user set username='ybc',password='123' where id = 6
</update>

 

1.4、查询一个实体类对象

<!--User getUserById();-->
<select id="getUserById" resultType="com.ssm.mybatis.bean.User">select * from t_user where id = 2
</select>

 

1.5、查询list集合

<!--List<User> getUserList();-->
<select id="getUserList" resultType="com.ssm.mybatis.bean.User">select * from t_user
</select>

注意: 查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系

resultType:自动映射,用于属性名和表中字段名一致的情况

resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况

 

  

二、MyBatis获取参数值的两种方式

MyBatis获取参数值的两种方式:${}#{}

${} 的本质就是字符串拼接,#{} 的本质就是占位符赋值

${} 使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单 引号

 #{} 使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时, 可以自动添加单引号

 

2.1、单个字面量类型的参数

若 mapper 接口中的方法参数为单个的字面量类型

此时可以使用 ${}#{} 以任意的名称获取参数的值,注意 ${} 需要手动加单引号

    <!--User getUserByUsername(String username);--><select id="getUserByUsername" resultType="User"><!--select * from t_user where username = '${username}'-->select * from t_user where username = #{username}</select>

 

2.2、多个字面量类型的参数

若mapper接口中的方法参数为多个时

此时MyBatis会自动将这些参数放在一个map集合中,以arg0,arg1...为键,以参数为值、以 param1,param2...为键,以参数为值;

因此只需要通过 ${}#{} 访问map集合的键就可以获取相 对应的值,注意 ${} 需要手动加单引号

    <!--User checkLogin(String username, String password);--><select id="checkLogin" resultType="User"><!--select * from t_user where username = '${arg0}' and password = '${arg1}'--><!--select * from t_user where username = #{param1} and password = #{param2}-->select * from t_user where username = #{arg0} and password = #{arg1}</select>

 

2.3、map集合类型的参数

若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在 map中

只需要通过 ${} #{} 访问map集合的键就可以获取相对应的值,注意 ${} 需要手动加单引号

    <!--User checkLoginByMap(Map<String ,Object> map);--><select id="checkLoginByMap" resultType="User"><!--select * from t_user where username = '${username}' and password = '${password}'-->select * from t_user where username = #{username} and password = #{password}</select>

 

2.4、实体类类型的参数

若mapper接口中的方法参数为实体类对象时

此时可以使用 ${} #{} ,通过访问实体类对象中的属性名获取属性值,注意 ${} 需要手动加单引号

    <!--void insertUser(User user);--><insert id="insertUser" >insert into t_user values(null,#{username},#{password},#{age},#{gender},#{email})</insert>

 

2.5、使用@Param标识参数

可以通过 @Param 注解标识mapper接口中的方法参数

此时,会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值;以 param1,param2...为键,以参数为值;

只需要通过 ${} #{} 访问map集合的键就可以获取相对应 的值, 注意 ${} 需要手动加单引号

    <!--User checkLoginByParam(@Param("username") String username, @Param("password") String password);--><select id="checkLoginByParam" resultType="User"><!--select * from t_user where username = '${username}' and password = '${password}'-->select * from t_user where username = #{username} and password = #{password}</select>

 

 

三、MyBatis的各种查询功能

3.1、查询一个实体类对象

package com.ssm.mybatis.mapper;import com.ssm.mybatis.pojo.User;
import org.apache.ibatis.annotations.Param;import java.util.List;/*** Author:wy* Date:2023/3/18*/public interface SelectMapper {/*** 根据用户id查询用户信息* @param id* @return*/User getUserById(@Param("id") int id);
}
<!--User getUserById(@Param("id") int id);-->
<select id="getUserById" resultType="User">select * from t_user where id = #{id}
</select>
    @Testpublic void testGetUserById() {SqlSession sqlSession = SqlSessionUtil.getSqlSession();SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);User user = mapper.getUserById(1);System.out.println(user);}

 

3.2、查询一个list集合

    /*** 查询所有用户信息* @return*/List<User> getUserList();
    <!--List<User> getUserList();--><select id="getUserList" resultType="User">select * from t_user</select>
    @Testpublic void testGetUserList() {SqlSession sqlSession = SqlSessionUtil.getSqlSession();SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);List<User> userList = mapper.getUserList();for (User user : userList) {System.out.println(user);}}

当查询的数据为多条时,不能使用实体类作为返回值,否则会抛出异常TooManyResultsException;

但是若查询的数据只有一条,可以使用实体类或集合作为返回值

 

3.3、查询单个数据

    /*** 查询用户的总记录数* @return*/Integer getCount();
     <!--Integer getCount();--><!--在MyBatis中,对于Java中常用的类型都设置了类型别名例如: Integer: int, integer例如: int: _int, _integer例如: Map: mapList: list--><select id="getCount" resultType="Integer">select count(*) from t_user</select>
    @Testpublic void testGetCount() {SqlSession sqlSession = SqlSessionUtil.getSqlSession();SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);Integer count = mapper.getCount();System.out.println("用户总数=" + count);}

 

3.4、查询一条数据为map集合

    /*** 根据用户id查询用户信息为map集合* @param id* @return*/Map<String, Object> getUserByIdToMap(@Param("id") Integer id);
    <!--Map<String, Object> getUserByIdToMap(@Param("id") int id);--><select id="getUserByIdToMap" resultType="map">select * from t_user where id = #{id}</select>
    @Testpublic void testGetUserByIdToMap() {SqlSession sqlSession = SqlSessionUtil.getSqlSession();SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);Map<String, Object> map = mapper.getUserByIdToMap(1);System.out.println(map);//结果:{password=123456, gender=男, id=1, age=21, email=123456@qq.com, username=张三}}

 

3.5、查询多条数据为map集合

方式一

    /*** 查询所有用户信息为map集合* @return* 将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合此时可以将这些map放在一个list集合中获取*/@MapKey("id")List<Map<String, Object>> getAllUserToMap();
    <!--Map<String, Object> getAllUserToMap();--><select id="getAllUserToMap" resultType="map">select * from t_user</select>
    @Testpublic void testGetAllUserToMap() {SqlSession sqlSession = SqlSessionUtil.getSqlSession();SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);List<Map<String, Object>> allUserToMap = mapper.getAllUserToMap();for (Map<String, Object> map : allUserToMap) {System.out.println(map);}}

 

方式二

    /*** 查询所有用户信息为map集合* @return* 可以将每条数据转换的map集合放在一个大的map中,* 但是必须要通过@Mapkey注解将查询的某个字段的值作为大的map的键*/@MapKey("id")Map<String, Object> getAllUserToMap();
    <!--Map<String, Object> getAllUserToMap();--><select id="getAllUserToMap" resultType="map">select * from t_user</select>
    @Testpublic void testGetAllUserToMap() {SqlSession sqlSession = SqlSessionUtil.getSqlSession();SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);Map<String, Object> map = mapper.getAllUserToMap();System.out.println(map);//{ // 1={password=123456, gender=男, id=1, age=21, email=123456@qq.com, username=张三}, // 2={password=123456, gender=女, id=2, age=19, email=123456@qq.com, username=老六} // }}

相关文章:

Mybatis --- 获取参数值和查询功能

一、MyBatis的增删改查 1.1、新增 <!--int insertUser();--> <insert id"insertUser">insert into t_user values(null,admin,123456,23,男) </insert> 1.2、删除 <!--int deleteUser();--> <delete id"deleteUser">dele…...

【C++】C++入门,你必须要知道的知识

1.C关键字 &#x1f525;前言&#xff1a; C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等。熟悉C语言之后&#xff0c;对C学习有一定的帮助。今天的主要目标&#xff1a; 1️⃣ 补充C语言语法的不足&…...

spring(七):事务操作

spring&#xff08;七&#xff09;&#xff1a;事务操作前言一、什么是事务二、事务四个特性&#xff08;ACID&#xff09;三、事务操作&#xff08;搭建事务操作环境&#xff09;四、事务操作&#xff08;Spring 事务管理介绍&#xff09;五、事务操作&#xff08;注解声明式事…...

Word怎么转换成PDF文件格式?思路提供

PDF是一种通用的文件格式&#xff0c;它可以在不同操作系统和设备上保持一致的显示效果。在日常工作或学习中&#xff0c;我们常常需要将Word文档转换为PDF格式&#xff0c;以便更好地进行分享、存档或打印&#xff0c;毕竟Word文档则往往会因为不同版本的软件或者字体等原因而…...

HCIE-Cloud Computing LAB备考第二步:逐题攻破--第五题:规划--根据网络平面规划表,完成ensp中接入交换机SW1/2的配置

我是第五题规划题目的要求之一,需要从这里跳转过来,没看过题目的彭友,可以先跳转过去哈 解题:根据网络平面规划表,在两台交换机上对应的端口表填写服务器的网口号,完成ensp中接入交换机SW1/2的配置 答案 完成交换机端口表 第一:心中划分好“服务器接口表”,考试不需…...

【无标题】Perforce研讨会回顾 | Helix Core在芯片行业的应用实例:芯片项目的版本控制、持续集成及自动化

2023年2月28日&#xff0c;龙智联合全球领先的数字资产管理和DevSecOps工具厂商Perforce共同举办Perforce on Tour网络研讨会——“赋能‘大’研发&#xff0c;助力‘快’交付”。 研讨会上&#xff0c;在芯片行业有15年经验的Perforce Helix Core深度用户——何刚了带来精彩演…...

AdamW 优化器

Adam 优化器于 2014 年推出&#xff0c;其思想&#xff1a;既然知道某些参数移动得更快、更远&#xff0c;则每个参数不需要遵循相同的学习率&#xff0c;因为最近梯度的平方代表每一个权重可以得到多少信号&#xff0c;可以除以这个&#xff0c;确保即使是最迟钝的权重也有机会…...

手把手教你基于HTML、CSS搭建我的相册(上)

The sand accumulates to form a pagoda写在前面HTML是什么&#xff1f;CSS是什么&#xff1f;demo搭建写在最后写在前面 其实有过一些粉丝咨询前端该从什么开始学&#xff0c;那当然是我们的前端基础三件套开始学起&#xff0c;HTML、CSS、javaScript&#xff0c;前端的大部分…...

基于Redis实现的延时队列

基于Redis实现的延时队列 针对于Redis实现延时队列有两种实现方式&#xff1a; 使用zset实现实现的延时队列 借助redis zset来实现延时队列&#xff0c;具体的实现代码很简单&#xff0c;就是从zset中取出score小于当前时间戳的数据 import cn.hutool.json.JSONUtil; impor…...

(3.16——3.19)本周后半段总结

周四&#xff08;3.16&#xff09; 1.封装了TitleTip组件&#xff0c;并写了博客记录 http://t.csdn.cn/DAY4chttp://t.csdn.cn/DAY4c2.菜单跳转配置完毕&#xff0c;进行了一些页面的细节样式修改 3.基本写完了ServerSideEncryption页面&#xff0c;十一点多剩最后一点交互的…...

C++ 基础: cin和getline() 有啥区别?

所谓温故而知新&#xff0c;所以时不时会回头来看看我们最最基础的知识。 获取标准键盘输入的方法有多种。以C语言来说&#xff0c;最常用的就是cin 和geline() 。那么它们之间有什么区别呢&#xff0c;我们总结一下。 一、cin和geline的异同点 在 C 中&#xff0c;cin 和 ge…...

在使用fastjson中遇到的问题

一、在使用fastjson中遇到的问题 导论&#xff1a;最近在写一个JavaFx项目的时候使用到了fastjson作为处理json数据的依赖。在其它非JavaFx项目中也使用到了相同版本的fastjson&#xff0c;但是可以正常运行&#xff0c;而在JavaFx项目中却报异常&#xff0c;刚开始以为是我的依…...

C++造轮子飙车现场之无锁、有锁环形队列实现

先看带锁的实现。 带锁版本 circular_queue.h // 头文件防卫 #ifndef CIRCULAR_QUEUE_H #define CIRCULAR_QUEUE_H#include <mutex> // 互斥量 #include <condition_variable> // 条件变量template <typename T> class CircularQueue { public:// 构造函数…...

Spring Profiles and @Profile

1. Overview In this tutorial, we’ll focus on introducing Profiles in Spring. Profiles are a core feature of the framework — allowing us to map our beans to different profiles — for example, dev, test, and prod. We can then activate different profiles…...

数据分析-数据探索

文章目录前言主要内容总结更多宝藏前言 &#x1f60e;&#x1f973;&#x1f60e;&#x1f920;&#x1f62e;&#x1f916;&#x1f648;&#x1f4ad;&#x1f373;&#x1f371; 随着大数据和人工智能技术的不断发展&#xff0c;数据分析已经成为了一种非常重要的技能和工…...

7个最受欢迎的Python库,大大提高开发效率

当第三方库可以帮我们完成需求时&#xff0c;就不要重复造轮子了 整理了GitHub上7个最受好评的Python库&#xff0c;将在你的开发之旅中提供帮助 PySnooper 很多时候时间都花在了Debug上&#xff0c;大多数人呢会在出错位置的附近使用print&#xff0c;打印某些变量的值 这个…...

Intellij IDEA 中调试 maven 插件

Intellij IDEA 中调试 maven 插件话痨一下步骤1. classfinal-demo 项目部分2. ClassFinal 部分参考资料话痨一下 目前有两个项目&#xff1a; ClassFinal 是一款java class文件安全加密工具。classfinal-demo 是我建的一个Demo&#xff0c;用来测试ClassFinal的加密效果。 目…...

Java全栈知识(1)缓存池

我们先看这么一道题 Integer x new Integer(123); Integer y new Integer(123); System.out.println(x y); // false Integer z 123; Integer k 123; System.out.println(z k); // true Integer a 200; Integer b 200; System.out.println(z k); //false 我们…...

网络安全的特性

0x00 前言 网络安全的特性包括&#xff0c;机密性&#xff0c;完整性&#xff0c;可用性&#xff0c;真实性和不可否认性。详细的内容可以参考如下的内容。 Xmind资源请下载~ 0x01 机密性 机密性&#xff08;Confidentiality&#xff09; 意味着阻止未经授权的实体&#x…...

YOLOv8 多目标跟踪

文章大纲 简介环境搭建代码样例跟踪原理代码分析原始老版实现新版本封装代码实现追踪与计数奇奇怪怪错误汇总lap 安装过程报错推理过程报错参考文献与学习路径简介 使用yolov8 做多目标跟踪 文档地址: https://docs.ultralytics.com/modes/track/https://github.com/ultralyt…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...