Mybatis增删改查基础

MyBatis可根据查询的结果类型、查询条件的不同进行统一处理。

1 查询数据

1.1 根据查询数据条数来分析不同的情况

1.1.1 查询单条数据

可以通过实体类、list集合、map等处理查询结果。

  • 通过实体类查询单条数据
   User queryUserById(@Param("id") Integer id);
   <select id="queryUserById" resultType="User">select * from t_user where id = #{id}</select>
  • 通过map接收
 Map<String, Object> queryUserMapById(@Param("id") Integer id);
 <select id="queryUserMapById" resultType="map">select * from t_user where id = #{id}</select>
1.1.2 查询多条数据
  • 通过类型为Map的list集合接收
    List<Map<String, Object>> queryUserMapList();
    <select id="queryUserMapList" resultType="map">select * from t_user</select>
  • 通过类型为实体的list集合接收
    List<User> selectUserList();
    <select id="selectUserList" resultType="User">select * from t_user</select>
  • 通过map接收

一条数据对应一个map,此时需要通过@MapKey注解设置map集合的键,值是每条数据对应的map集合

注意:此时一定不能使用实体类对象接收,会抛出TooManyResultsException

    @MapKey("id")Map<String, Object> getAllUserToMap();
    <select id="getAllUserToMap" resultType="map">select * from t_user</select>

1.2 其他情形

1.2.1 模糊查询
    List<User> queryUserByLike(@Param("username") String username);
    <select id="queryUserByLike" resultType="User"><!-- select * from t_user where username like '%${username}%' --><!-- select * from t_user where username like concat('%', #{username}, '%') -->select * from t_user where username like "%"#{username}"%"</select>
1.2.2 动态表名
    List<User> queryAllUser(@Param("tableName") String tableName);
    <select id="queryAllUser" resultType="User">select * from ${tableName}</select>

2 新增数据

2.1 通过实体类新增
    @Testpublic void testInsertUser(){SqlSession sqlSession = SqlSessionUtil.getSqlSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("中华");user.setPassword("123456");user.setAge(32);user.setSex("男");int i = userMapper.insertUser(user);System.out.println(i);}
    int insertUser(User user);
    <insert id="insertUser">insert into t_user values(null, #{username}, #{password}, #{age}, #{sex})</insert>

此处,表的主键设计为自增。

也可以明确设置主键为自增:

    <!--useGeneratedKeys:设置使用自增主键keyProperty:自增主键放在传所参数对象的字段属性名,会将生成的自增主键设置到入参的字段中keyColumn:自增主键对应表的字段名--><insert id="insertUser" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="User">insert into t_user values(null, #{username}, #{password}, #{age}, #{sex})</insert>
2.2 通过map新增
    @Testpublic void testQueryByMapParam(){SqlSession sqlSession = SqlSessionUtil.getSqlSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);Map<String, Object> map = new HashMap<>();map.put("username", "李斯");map.put("age", 23);map.put("password", "000000");map.put("sex", "女");List<User> admin = userMapper.insertUser(map);admin.stream().forEach(System.out::println);}
    int insertUser(Map<String, Object> map);
    <insert id="insertUser" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="map">insert into t_user values(null, #{username}, #{password}, #{age}, #{sex})</insert>

3 修改数据

    int udpateUserById(User user);
    <update id="udpateUserById" parameterType="User">update t_user set username = #{username}, password = #{password} where id = #{id}</update>

4 删除数据

4.1 单个删除
    int deleteUserById(@Param("id") String id);
    <delete id="deleteUserById">delete from t_user where id = #{id}</delete>
4.2 批量删除
    int deleteUserByIds(@Param("ids") String ids);
    <delete id="deleteUserByIds">delete from t_user where id in (${ids})</delete>
    int result = deleteMapper.deleteUserByIds("5,6,7");

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

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

相关文章

C、C++、C#的区别概述

C、C、C#的区别概述 https://link.zhihu.com/?targethttps%3A//csharp-station.com/understanding-the-differences-between-c-c-and-c/文章翻译源于此链接 01、C语言 ​ Dennis Ritchie在1972年创造了C语言并在1978年公布。Ritchie设计C的初衷是用于开发新版本的Unix。在那之…

express框架使用

一、express介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架&#xff0c;简单来说&#xff0c;express 是一个封装好的工具包&#xff0c;封装了很多功能&#xff0c;便于我们开发 WEB 应用&#xff08;HTTP 服务&#xff09; 二、express 使用 2.1 e…

【组合数学】递推关系

目录 1. 递推关系建立2. 常系数齐次递推关系的求解3. 常系数非齐次递推关系的求解4. 迭代法 1. 递推关系建立 给定一个数的序列 f ( 0 ) , f ( 1 ) , . . . , f ( n ) , . . . , f (0), f(1), ..., f(n ),... , f(0),f(1),...,f(n),..., 若存在整数 n 0 n_0 n0​ &#xff…

datav-实现轮播表,使用updateRows方法-无缝衔接加载数据

前言 最近在做大屏需求的时候&#xff0c;遇到一个轮播数据的需求&#xff0c;查看datav文档发现确实有这个组件 但这个组件只提供了一次加载轮播的例子&#xff0c;虽然提供了轮播加载数据updateRows方法 但是文档并没有触发事件&#xff0c;比如轮播完数据触发事件&#xf…

ESL电子标签的真相:电子墨水屏没墨水?

一说到电子墨水屏 你大概率会想到Kindle 如果你问是不是墨水做的 那这篇文章你就得好好看看了 在我们日常与客户的沟通中 为数不多却出乎意料地有好几个以下对话↓ 在此辟谣 电子墨水屏里确实 没 有 墨 水 那它是什么样的原理&#xff1f;为什么越来越多显示设备采用&…

Abp vNext在Docker部署并导出镜像

Docker介绍 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何…

深度剖析中国居民消费价格指数CPI数据可视化案例-Python可视化技术实现(附完整源码)【数据可视化项目案例-16】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本专栏包括所有的可视化技术学习,感兴趣可以到本专栏页面,查阅可视化宝典可快速了解本专栏。订阅专栏用户可以在每篇文章底部下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不论…

Win11在Virtualbox上安装ubuntu操作系统

注&#xff1a;原创笔记&#xff0c;以下图片水印为本人 相关工具展示 第四个&#xff1a;ubuntu的vmdk文件&#xff0c;用于配置虚拟机 第5/6个&#xff1a;virtualbox安装包 一、安装 VirtualBox 由于win11版本问题&#xff0c;如果装不了 virtualBox需要在官网安装最新版…

新零售模式:跨境电商如何实现线上线下融合?

随着数字时代的发展&#xff0c;新零售模式逐渐崭露头角&#xff0c;成为跨境电商发展的重要趋势。线上线下融合不仅拓宽了销售渠道&#xff0c;更提供了更丰富、更便捷的购物体验。 本文将深入探讨新零售模式在跨境电商中的应用&#xff0c;以及如何实现线上线下融合&#xf…

前后端请求之nginx配置

问题&#xff1a; 前端发送的请求&#xff0c;是如何请求到后端服务器的&#xff1f; 如&#xff0c;前端请求地址&#xff1a;http://loclhost/api/employee/login&#xff1a; 后端相应请求地址&#xff1a;http://loclhost:8080/admin/employee/login 回答&#xff1a; …

使用MfgTool烧写前需准备的文件

一. 简介 本文我们就来学习&#xff0c;如何将我们编译的 uboot&#xff0c;zImage&#xff08;内核镜像&#xff09;&#xff0c;xxx.dtb设备树文件&#xff0c;还有制作的根文件系统&#xff0c;这四个文件烧写到开发板中&#xff0c;最后 开发板能正常启动。 本文这里使用…

【日志技术】附Logback入门教程

文章目录 日志概论日志的体系Logback快速入门日志配置文件配置日志级别 日志概论 什么是日志&#xff1f;其实可以通过下面几个问题来了解的。 系统系统能记住某些数据被谁操作&#xff0c;比如被谁删除了&#xff1f;想分析用户浏览系统的具体情况&#xff0c;比如挖掘用户的…

一个简单的Python自动化测试 logging 日志模块,为何会难住一个工作6年的测试?

写Python程序的时候&#xff0c; 我们经常需要写日志&#xff0c; 以便调试程序&#xff0c;发现问题&#xff0c;以及查看程序的运行状态。 Python自带了logging模块&#xff0c;可以将日志保存到.txt文件中&#xff0c; 也可以输入到界面上。 我们希望日志有一定的格式, 比…

【性能优化】性能优化实战

一、背景 在做code review的时候&#xff0c;经常会发现&#xff0c;因为开发习惯问题&#xff0c;很多研发人员喜欢在for循环中查询数据库。今天用一个真实例子&#xff0c;记录一次查询性能优化的例子 二、示例 代码如下: classmethod fn_performance() def get_task_ins…

Linux常用调试工具gdb

程序编译后&#xff0c;调试是十分重要的环节&#xff0c;如何更好更快的定位程序中的问题&#xff0c; 是加快程序开发进度的重要因素。Gdb 调试器是一款 GNU 开发组织并发布的 UNIX/Linux 下的程序调试工 具。GDB调试 编译要点 对代码进行编译&#xff0c;注意一定要加上选项…

【C语言】【数据结构】自定义类型:结构体

引言 这是一篇对结构体的详细介绍&#xff0c;这篇文章对结构体声明、结构体的自引用、结构体的初始化、结构体的内存分布和对齐规则、库函数offsetof、以及进行内存对齐的原因、如何修改默认对齐数、结构体传参进行介绍和说明。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&am…

Ubuntu——永久挂载/卸载硬盘

Ubuntu——永久挂载/卸载硬盘 一、挂载1. 查询硬盘2. 格式化硬盘3. 挂载硬盘4. 开机自动挂载5. 查看挂载是否成功 二、取消挂载参考资料&#xff1a; 一、挂载 1. 查询硬盘 sudo fdisk -l2. 格式化硬盘 # 格式化硬盘(/dev/sda)的文件系统&#xff0c;这里格式化为 ext4 系统…

面试经典150题(3-4)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第二天&#xff09;完成了两道(3-4)150&#xff1a; (26. 删除有序数组中的重复项) 题目描述&#xff1a; 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使…

C#生成Token字符串

Token字符串来保证数据安全性&#xff0c;如身份验证、跨域访问等。但是由于Token字符串的长度比较长&#xff0c;可能会占用过多的空间和带宽资源&#xff0c;因此我们需要生成短的Token字符串 方法一&#xff1a;使用Base64编码 Base64编码是一种常用的编码方式&#xff0c…

测试:接口参数测试

接口参数测试是接口测试中非常重要的一部分&#xff0c;主要是为了验证接口在不同参数输入下的行为和响应。下面详细介绍一下接口参数测试的相关内容&#xff1a; 参数必填与非必填测试&#xff1a;需要测试接口对必填参数和非必填参数的处理。对于必填参数&#xff0c;不提供…