使用mybatis注解和xml映射执行javaWeb中增删改查等操作
Mapper接口
使用注解执行SQL语句操作和相应的Java抽象类(对于简单的增删改查使用注解)
@Mapper
public interface EmpMapper {// 根据id删除员工信息@Delete("delete from mybatis.emp where id=#{id}")public int EmpDelete(Integer id);// 查询所有员工信息@Select("select * from emp")public List<Emp> EmpSelect();//将自动增长的id封装到emp对象的id属性中@Options(useGeneratedKeys = true, keyProperty="id")//向emp表中插入一条数据@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})")public void EmpInsert(Emp emp);//更新emp表中的数据@Update("update emp set username=#{username},name=#{name},gender=#{gender},image = #{image},"+"job=#{job},entrydate=#{entrydate},dept_id = #{deptId},update_time=#{updateTime} where id=#{id}")public void update(Emp emp);//方案一:为字段起别名,让MySQL中的字段和java类中的字段名一致,这样mybatis 就能获取MySQL中相对应的字段数据了
// @Select("select id, username, password, name, gender, image, job, entrydate, dept_id as deptId, create_time as createTime, " +
// "update_time as updateTime from emp where id = #{id}")
// public Emp Search(Integer id);// // 方案二:在Results注解中将数据库表中的dept_id列映射到Java对象中的deptId属性
// @Results({
// //MySQL中的字段名和Java类中对应的属性名
// @Result(column = "dept_id",property = "deptId"),
// @Result(column = "create_time",property = "createTime"),
// @Result(column = "update_time",property = "updateTime")
//
// })
// @Select("select * from emp where id = #{id}")
// public Emp Search(Integer id);//方案三:在配置文件中开启mybatis的驼峰命名自动映射开关mybatis.camel,无需动原代码自动映射// 根据id查询员工信息@Select("select * from emp where id = #{id}")public Emp Search(Integer id);@Select("select * from emp where name like concat('%',#{name},'%') and gender= #{gender} and entrydate between #{begin} and #{end} order by update_time desc")//条件查询public List<Emp> conditionSearch(String name , Short gender , LocalDate begin , LocalDate end);
}
使用xml配置映射语句(对于复杂的SQL语句,建议使用xml配置映射语句)


接收MySQL数据的Java类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {private Integer id;private String username;private String password;private String name;private Short gender;private String image;private Short job;private LocalDate entrydate; //LocalDate类型对应数据表中的date类型private Integer deptId;private LocalDateTime createTime;//LocalDateTime类型对应数据表中的datetime类型private LocalDateTime updateTime;
}
连接数据库和引入mybatis的配置文件
spring.application.name=mybatis-idus
#连接数据库
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=root
#配置mybatis.log日志,指定输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#开启mybatis的驼峰命名自动映射开关mybatis.camel
mybatis.configuration.map-underscore-to-camel-case=true
执行相关操作的测试类
@SpringBootTest
class MybatisCdusApplicationTests {@Autowiredprivate EmpMapper emp;@Testvoid contextLoads() {// //删除id为17的员工
// int n = emp.EmpDelete(17);
// System.out.println(n);
// //创建一个新的员工对象
// Emp emp2 = new Emp();
// //设置员工对象的属性
// emp2.setUsername("Tom3");
// emp2.setName("汤姆3");
// emp2.setGender((short)1);
// emp2.setImage("https://img-home.csdnimg.cn/images/20240218021830.png");
// emp2.setJob((short)2);
// emp2.setDeptId(1);
// emp2.setEntrydate(LocalDate.now());
// emp2.setCreateTime(LocalDateTime.now());
// emp2.setUpdateTime(LocalDateTime.now());
// //插入新的员工对象
// emp.EmpInsert(emp2);
// //使用了 @Options(useGeneratedKeys = true, keyProperty="id") 就可以获取主键值了
// System.out.println(emp2.getId());
//
// System.out.println(n);
//
// //创建一个新的员工对象
// Emp emp3 = new Emp();
// //设置员工对象的属性
// emp3.setUsername("Tom4");
// emp3.setName("汤姆4");
// emp3.setGender((short)1);
// emp3.setImage("https://img-home.csdnimg.cn/images/20240218021830.png");
// emp3.setJob((short)2);
// emp3.setDeptId(1);
// emp3.setEntrydate(LocalDate.of(2001,12,12));
// emp3.setCreateTime(LocalDateTime.now());
// emp3.setUpdateTime(LocalDateTime.now());
// emp3.setId(21);
// //更新员工对象
// emp.update(emp3);
//
// //根据id查询员工对象
// Emp employee = emp.Search(21);
// System.out.println(employee.toString());// 根据姓名、性别、入职日期和当前日期进行条件查询emp.conditionSearch("汤", (short) 1, LocalDate.of(2010,1,1),LocalDate.now());}}
MySQL相关数据
create table emp
(id int unsigned auto_increment comment 'ID'primary key,username varchar(20) not null comment '用户名',password varchar(32) default '123456' null comment '密码',name varchar(10) not null comment '姓名',gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',image varchar(300) null comment '图像',job tinyint unsigned null comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师',entrydate date null comment '入职时间',dept_id int unsigned null comment '部门ID',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间',constraint usernameunique (username)
)comment '员工表';
相关文章:
使用mybatis注解和xml映射执行javaWeb中增删改查等操作
Mapper接口 使用注解执行SQL语句操作和相应的Java抽象类(对于简单的增删改查使用注解) Mapper public interface EmpMapper {// 根据id删除员工信息Delete("delete from mybatis.emp where id#{id}")public int EmpDelete(Integer id);// 查…...
SpringBoot3 响应式编程
Spring Boot 3 中的响应式编程是一个重要的特性,它允许开发者构建非阻塞、异步和基于事件的应用程序,这对于处理高并发和实时数据流的应用场景尤为重要。以下是对Spring Boot 3响应式编程的详细解析: 一、响应式编程概述 响应式编程是一种编…...
【C++ 面试 - 基础题】每日 3 题(二)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...
Modelica建模,Modelica语言的学习,技术调研工作
Modelica建模,Modelica语言的学习,技术调研工作 参考资料: 苏州同元软控信息技术有限公司 - 同元 Modelica 再探冷却 modelica学习-CSDN博客 1、 Modelica简介 Modelica是由Modelica协会维护、免费开放的物理系统面向对象的统一建模语言规…...
Oracle数据字典之——v$lock 和v$locked_object
v$lock视图 v$lock视图列出当前系统持有的或正在申请的所有锁的情况,其主要字段说明如下: 11g如下: 字段名称类型说明ADDRRAW(8)锁定状态对象的地址KADDRRAW(8)锁的地址SIDNUMBER会话(SESSION)标识;TYPE…...
solidity 以太坊(Ether) 单位(很基础)
一个字面常数可以带一个后缀 wei, gwei 或 ether 来指定一个以太坊的数量, 其中没有后缀的以太数字被认为单位是wei。 在以太坊和许多其他基于以太坊的区块链系统中,以太币(Ether)是网络中的主要加密货币。 以太可以被…...
关于elementUI 分页 table 使用 toggleRowSelection
我出现问题的前提 在table表格第一页全选 ,第二页全选 回到第一页 点击按钮 取消 第一页,第二页我不要的勾选 初始实现 this.selectedPeraonal是表格 selection-change方法返回的值 handleSelectionChange(val) {this.selectedPeraonal val || []…...
K8s部署RocketMQ
准备工作 我是win电脑,本地安装了Podman,并使用Kind创建了一个K8s本地环境,并在 win 电脑上安装了 Helm。 部署RocketMQ 1. add rocketmq helm repo 2. deploy rocketmq cluster 3. verify the rocketmq cluster 4. Create Topic by api a…...
Linux服务管理-Nginx配置
静态解析主要解析html、css动态解析需要解析php 动态资源通过轮询分配到后端的Apache服务器处理 apache是同步阻塞,nginx是异步非阻塞...
C语言典型例题31
《C程序设计教程(第四版)——谭浩强》 习题2.8 请编写程序将China译为密码,密码的规律是:用原来字母后面的第4个字母代替原来的字母。 例如:C后面的4个字母是G,h后面第4个字母为l 代码: //《C程序设计教程…...
FFMPEG 工具方法
av_strerror int av_strerror ( int errnum, char * errbuf, size_t errbuf_size )ffmpeg获取与设置mp4文件旋转方向方法 设置与获取都是对AVStream的dict操作. 设置 for (i 0; i < ifmt_ctx_v->nb_streams; i) { //Create output AVStream according to input A…...
Qt QML 使用QPainterPath绘制弧形曲线和弧形文本
Qt并没有相关api直接绘制弧形文字,但提供了曲线绘制相关类,所以只能另辟蹊径,使用QPainterPath先生成曲线,然后通过曲线上的点来定位每个文字并draw出来。 QML具体做法为从QQuickPaintedItem继承,在派生类中实现paint…...
VMware虚拟机和Docker的备份与恢复
目录 1. VMware虚拟机的快照备份 1.1 VMware本机的快照备份 1.2 VMware快照备份到另一电脑 2. Docker知识点 2.1 Docker镜像和容器的关系 2.2 Docker的存储卷 2.3 Docker命令简介 2.4 删除Anylink镜像 3. Docker备份和恢复 3.1 确定要回滚的容器和版本 3.2 备份当前…...
新加坡服务器延迟大吗?如何进行优化
新加坡服务器延迟大吗?新加坡服务器的延迟通常在全国平均延迟111ms左右,其中移动网络约为90ms,联通网络106ms,电信网络最低约为85ms。为了进行优化,一般可以采取使用CDN、优化路由线路、增加带宽和服务器升级等方法。 …...
uniapp——列表图片加载太多且空间占用太大的处理方法(降低清晰度)
解决方法 列表默认显示的降低清晰度,预览图片的时候加载原图。 如果图片是上传到阿里云的OSS上,可以快速获取图片缩略图的方法 直接在后端返回的URL后面拼接字符串: XXX.png?x-oss-process 缩略图方法介绍: ?x-oss-proces…...
spring+SSM+Mybatis面试题(上)(30道)
目录 1. 何为Spring Bean容器?Spring Bean容器与Spring IOC 容器有什么不同吗?2. Spring IOC 如何理解?3. Spring DI 如何理解?4. Spring 中基于注解如何配置对象作用域?以及如何配置延迟加载机制?1.配置作用域需要注解Scope(“Singleton”)2.开启延迟加载:La…...
odoo17 翻译一个小bug
odoo17 翻译一个小bug 用户界面的没译过来 标红处,但在zh_CN.po中明显已经翻译过来了,采取暴力点的,直接把base下的base.pot删除,再更新一下,可以正常显示了...
sqli-labs-php7-master第5-10关
第五关: 根据提示输入ID,随便来个一 输入100,因为数据库没有,所以这里没输出内容 还是先找注入点:输入单引号试试 注入点找到了‘ 查询数据库列数;?id1 order by 4 -- 测试发现order by 3时页面正常&…...
全方位教程:接入视频美颜SDK与直播美颜插件的完整步骤
今天,小编将为您详细介绍如何接入视频美颜SDK与直播美颜插件的完整步骤。 一、准备工作 开发环境的搭建 在开始集成之前,确保您的开发环境已配置完毕。无论是使用iOS、Android,还是Web开发,您都需要准备好对应的开发工具链&…...
Apache Curator 分布式锁的介绍,以及案例
可重入锁(InterProcessMutex):这种锁允许同一个客户端多次获取同一把锁而不会被阻塞,类似于Java中的ReentrantLock。它通过在Zookeeper的指定路径下创建临时序列节点来实现锁的功能。如果获取锁失败,当前线程会监听前一…...
行波管(TWT)核心参数权衡:填充比、流通率与电子注效率的物理本质及工程设计
在行波管(TWT)设计中,填充比(F)、流通率(ηₜᵣₐₙₛ)与电子注效率(ηₑ)是决定器件性能的三大核心参数,三者并非独立存在,而是形成了紧密的物理…...
解锁浏览器潜能:用户脚本实用指南
解锁浏览器潜能:用户脚本实用指南 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork 你是否常常觉得浏览器功能不够用?想让网页自动完成重复操作?希望个性…...
PySide6新手必看:从零开始用Python玩转Qt界面开发(附官方教程对比)
PySide6新手必看:从零开始用Python玩转Qt界面开发 在Python生态中,GUI开发一直是个让人又爱又恨的话题。当Tkinter显得过于简陋,而PyQt又面临商业授权困扰时,PySide6作为Qt官方推出的Python绑定,正成为越来越多开发者的…...
Java全栈工程师面试实录:从基础到实战的深度技术探讨
Java全栈工程师面试实录:从基础到实战的深度技术探讨 一、面试开场 面试官(李工):你好,欢迎来到我们公司。我是李工,负责技术面试。今天我们会围绕你的技术栈进行一些深入交流。 应聘者(张明&am…...
PyTorch 2.8镜像快速部署:5分钟验证torch.cuda.is_available()并启动API服务
PyTorch 2.8镜像快速部署:5分钟验证torch.cuda.is_available()并启动API服务 1. 镜像概述与环境准备 PyTorch 2.8深度学习镜像是一个开箱即用的高性能计算环境,专为现代AI工作负载优化。这个预配置环境能让你跳过繁琐的安装过程,直接进入模…...
基于GADF-CNN-GOSO-LSSVM的齿轮箱故障诊断方法探索
基于GADF-CNN-GOSO-LSSVM的齿轮箱故障诊断 首先,利用格拉姆角场差(GADF)时频分辨率高、可以深度反映时间序列内在结构和关系的特点,对采集到的一维故障数据信号转为二维图像,得到图像后并将图像进行降维处理;然后,将第…...
Phi-4-mini-reasoning案例分享:用逻辑题测试模型对‘必要条件’的理解深度
Phi-4-mini-reasoning案例分享:用逻辑题测试模型对必要条件的理解深度 1. 模型能力定位 Phi-4-mini-reasoning是专为推理任务优化的文本生成模型,其核心优势在于处理需要多步逻辑推导的问题。与通用对话模型不同,它更擅长处理以下类型任务&…...
【AI编程工具系列:第13篇】华为CodeArts与豆包MarsCode实战:企业级AI编程工具深度对比
摘要 本文全面对比分析华为CodeArts和豆包MarsCode两款企业级AI编程工具。华为CodeArts凭借三层融合架构(AI原生IDE集成层、代码智能体引擎层、Codebase语义索引系统层),在安全合规、信创兼容和私有化部署方面表现卓越,代码补全延…...
ARMv8虚拟化性能优化指南:TLB的ASID和VMID到底怎么用?
ARMv8虚拟化性能优化指南:TLB的ASID和VMID实战解析 虚拟化技术在云计算和容器化场景中已成为基础设施的核心支柱,而ARM架构凭借其能效优势,正逐步渗透到数据中心领域。但在高密度虚拟化环境中,内存访问性能往往成为瓶颈——我们曾…...
告别图形界面!用DM数据库的dlsql命令行工具,5分钟搞定日常数据库运维
命令行利器dlsql:DM数据库高效运维实战指南 在数据库运维的世界里,图形化界面固然直观,但真正的高手往往更青睐命令行工具带来的高效与灵活。DM数据库的dlsql命令行客户端,就是这样一把被许多DBA私藏的"瑞士军刀"。 1. …...
