springboot-mybatis的增删改查
目录
一、准备工作
二、常用配置
三、尝试
四、增删改查
1、增加
2、删除
3、修改
4、查询
五、XML的映射方法
一、准备工作
实施前的准备工作:
-
准备数据库表
-
创建一个新的springboot工程,选择引入对应的起步依赖(mybatis、mysql驱动、lombok)
-
application.properties中引入数据库连接信息
-
创建对应的实体类 Emp(实体类属性采用驼峰命名)
-
准备Mapper接口 EmpMapper
SQL文件:emp的sql文件

二、常用配置
#指定mybatis输出日志的位置, 输出控制台 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl# 查询的时候mybatis驼峰命名法 mybatis.configuration.map-underscore-to-camel-case=true
三、尝试
在Mybatis中提供的参数占位符有两种:${...} 、#{...}
-
#{...}
-
执行SQL时,会将#{…}替换为?,生成预编译SQL,会自动设置参数值
-
使用时机:参数传递,都使用#{…}
-
-
${...}
-
拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题
-
使用时机:如果对表名、列表进行动态设置时使用
-
注意事项:在项目开发中,建议使用#{...},生成预编译SQL,防止SQL注入安全。
四、增删改查
1、增加
// 新增@Options(useGeneratedKeys = true,keyProperty = "id") // 返回主键@Insert("insert into emp(username, name, gender, image, job, entrydate, " +"dept_id, create_time, update_time) " +"values (#{userName}, #{name}, #{gender}, #{image}," +" #{job}, #{entryDate}, #{deptId}, #{createTime}, #{updateTime})")int insert(Emp emp);
测试
// 新增@Testpublic void empAdd(){//创建员工对象Emp emp = new Emp();emp.setUserName("小明");emp.setName("小将");emp.setImage("sadasdasd.jpg");emp.setGender((short)1);emp.setJob(1);emp.setEntryDate(LocalDate.of(2000,1,1));emp.setCreateTime(LocalDate.now());emp.setUpdateTime(LocalDate.now());emp.setDeptId(1);empMapper.insert(emp);}
2、删除
// 删除@Delete("delete from emp where id = #{id}")int delete(int id);
test
// 删除测试@Testpublic void empDelete() {var s = empMapper.delete(17);System.out.printf("删除:%s\n",s);}
3、修改
// 修改@Update("update emp set username = #{userName}, name = #{name}, gender = 3 where id = 18;")void update(Emp emp);
Test
// 修改@Testpublic void update(){Emp emp = new Emp();emp.setName("大卫");emp.setUserName("daadasd");emp.setGender(2);empMapper.update(emp);}
4、查询
// 查询@Select("select * from emp " +"where name like concat('%',#{name},'%') " +"and gender = #{gender} " +"and entrydate between #{begin} and #{end} " +"order by update_time desc")List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
Test
// 查询@Testpublic void search(){List<Emp> emp = empMapper.list("汤姆", (short) 1,LocalDate.of(2000,8,15),LocalDate.of(2023,8,5));System.out.println(emp);}
五、XML的映射方法
-
<sql>:定义可重用的SQL片段 -
<include>:通过属性refid,指定包含的SQL片段 -
<if>-
用于判断条件是否成立,如果条件为true,则拼接SQL
-
形式:
<if test="name != null"> … </if>
-
-
<where>-
where元素只会在子元素有内容的情况下才插入where子句,而且会自动去除子句的开头的AND或OR
-
-
<set>-
动态地在行首插入 SET 关键字,并会删掉额外的逗号。(用在update语句中)
-
-
<foreach>遍历deleteByIds方法中传递的参数ids集合<foreach collection="集合名称" item="集合遍历出来的元素/项" separator="每一次遍历使用的分隔符" open="遍历开始前拼接的片段" close="遍历结束后拼接的片段"> </foreach>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.crud.mapper.EmpMapper"><!--提取重复代码 --><sql id="commonSelect">select * from emp </sql><!-- 查询-->
<!-- resultType单条记录封装的类型 --><select id="list" resultType="com.demo.crud.pojo.Emp"><include refid="commonSelect"/><where><if test="name != null">name like concat('%',#{name},'%')</if>order by update_time desc</where></select><!--删除操作--><delete id="deleteByIds">delete from emp where id in<foreach collection="ids" item="id" separator="," open="(" close=")">#{id}</foreach></delete></mapper>
相关文章:
springboot-mybatis的增删改查
目录 一、准备工作 二、常用配置 三、尝试 四、增删改查 1、增加 2、删除 3、修改 4、查询 五、XML的映射方法 一、准备工作 实施前的准备工作: 准备数据库表 创建一个新的springboot工程,选择引入对应的起步依赖(mybatis、mysql驱动…...
HTML5(H5)的前生今世
目录 概述HTML5与其他HTML的区别CSS3与其他CSS版本的区别总结 概述 HTML5是一种用于构建和呈现网页的最新标准。它是HTML(超文本标记语言)的第五个版本,于2014年由万维网联盟(W3C)正式推出。HTML5的前身可以追溯到互联…...
抽象工厂模式(Abstract Factory)
抽象工厂模式提供一个创建一组相关或相互依赖的对象的接口,而无须指定它们具体的类,每个子类可以生产一系列相关的产品。 The Abstract Factory Pattern is to provide an interface for creating families of related or dependent objects without s…...
Java 实现下载文件工具类
package com.liunian.utils;import lombok.SneakyThrows;import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream;/*** ClassName DownloadFileUtils* Author liuyan 下载文件工具类…...
C# 12 预览版的新功能
作者:Kathleen Dollard 排版:Alan Wang Visual Studio 17.7 Preview 3 和 .NET 8 Preview 6 的发布推进了 C# 12的发展。此预览版包含的功能为将来的性能增强奠定了基础。现在,您能够在库中更方便的使用内联函数。此预览版首次推出了一项实验…...
34.利用matlab解 多变量多目标规划问题(matlab程序)
1.简述 学习目标:适合解 多变量多目标规划问题,例如 收益最大,风险最小 主要目标法,线性加权法,权值我们可以自己设定。 收益函数是 70*x(1)66*x(2) ; 风险函数是 0.02*x(1)^20.01*x(2)^20.04*(x…...
暑假刷题第18天--7/30
165. 小猫爬山 - AcWing题库(dfs) #include<iostream> #include<string> #include<bitset> #include<cstring> #include<algorithm> using namespace std; const int N18; bool vis[N]; int a[N],n,ans,sum[N],k; bool cmp(int x,int y){retur…...
通向架构师的道路之Apache整合Tomcat
一、先从J2EE工程的通用架构说起 这是一个通用的Web即B/S工程的架构,它由: Web Server App Server DB Server 三大部分组成,其中: Web Server 置于企业防火墙外,这个防火墙,大家可以认为是…...
如何消除“信息孤岛”对业务增长的威胁?
根据CMSWire的数据,员工平均每天要花36%的时间来查找和整合信息。但44%的情况下,他们找不到信息。这种时间和精力的浪费就是信息孤岛造成的。 什么是信息孤岛? 当部门存储数据并限制其他人访问数据时,就会出现信息孤岛ÿ…...
Kali部署dvwa和pikachu靶场
kali换源 进入 vim /etc/apt/sources.list deb https://mirrors.aliyun.com/kali kali-rolling main non-free contrib deb-src https://mirrors.aliyun.com/kali kali-rolling main non-free contrib替换完后更新源 apt-get upadteDVWA靶场环境搭建 使用git从github上把DV…...
LeetCode解法汇总722. 删除注释
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 给一个 C 程序,删除程序中的注释。这个程序source是一个数组&#x…...
Linux中的firewall-cmd
2023年8月4日,周五上午 目录 打开端口关闭端口查看某个端口是否打开查看当前防火墙设置firewall-cmd中的服务在防火墙中什么是服务?为什么会有服务?打开或关闭服务查看某个服务是否打开firewall-cmd中的 zones查看所有可用的zones࿰…...
python 最大归一化
最大归一化是将数据转化到[-1,1]范围之间。公式如下 其中|X|max为x特征的绝对值的最大值。 数据标准化算法介绍—数据建模工具_预处理_Max_字段 """ 最大绝对值归一化(max abs normalization ):也就是将数值变为单位长度&…...
Netty:ByteBuf写入数据、读出数据
介绍 Netty的ByteBuf数据位置索引是0开始的。 可以用ByteBuf的getByte(int index)方法从指定位置读出一字节,这个操作不会改变ByteBuf的readerIndex 或者 writerIndex 的位置。如果index小于0,或者index 1大于ByteBuf的容量,就会抛出IndexO…...
C++(15):面向对象程序设计
面向对象程序设计概述 面向对象程序设计(object-oriented programming)的核心思想是数据抽象、继承和动态绑定。 1.使用数据抽象,可以将类的接口与实现分离; 2.使用继承,可以定义相似的类型并对其相似关系建模&#x…...
2023牛客暑期多校训练营6-A Tree
2023牛客暑期多校训练营6-A Tree https://ac.nowcoder.com/acm/contest/57360/A 文章目录 2023牛客暑期多校训练营6-A Tree题意解题思路代码 题意 解题思路 最大价值和这个数据范围,一眼 d p dp dp。 直接在树上并不好处理,问题是如何有效转化、处理…...
Vc - Qt - QPainter::SmoothPixmapTransform及QPainter::Antialiasing
QPainter::SmoothPixmapTransform是一个标志,用于指定绘制操作中的平滑像素变换行为。当使用QPainter绘制一幅图像时,设置SmoothPixmapTransform标志可以使图像变换过程更加平滑,减少锯齿状边缘的出现。此标志通常用于绘制缩放后图像的情况。…...
【练习】条件变量:创建三个线程 id号为ABC,三个线程循环打印自己的ID号,运行顺序为 ABCABC
题目: 创建三个线程 id号为ABC,三个线程循环打印自己的ID号,运行顺序为 ABCABC......要求使用条件变量 #include <stdio.h> #include <pthread.h> #include <unistd.h>//创建互斥锁 pthread_mutex_t mutex PTHREAD_MUTE…...
SpringBoot项目修改中静态资源,只需刷新页面无需重启项目(附赠—热加载)
初衷 💢初衷💢 因为一遍遍修改并重启项目觉得很麻烦,所以刚开始就自己给项目配置了热加载,但奈何代码更新还是慢,还不如我重启一遍项目的速度,所以放弃了自己上网找到的热加载配置。直到我debugger前端代码…...
clear_data_code_2d_model
dev update off () dev close window () ImageFiles:-./二维条码/read_image(Image,ImageFiles 十二维条码原图.png)dev_open_window_fit_image(Image,0,0,-,-1,WindowHandle)set_display_font (WindowHan…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
