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

MyBatis(学习记录)

一、ORM

  ORM是“对象关系映射”(Object-Relational Mapping)的缩写。这是一种编程技术,用于将对象模型与关系型数据库系统之间的数据进行转换。在面向对象的编程语言中,数据通常以对象的形式表示;而在关系型数据库中,数据则以表格的形式存储。

二、配置数据源

spring:#配置mybatis的数据源 DataSourcedatasource:username: rootpassword: 429619driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/easydatamybatis:mapper-locations: classpath:mapper/*.xmllogging:level:com.easy.dao: debug

1.配置了MyBatis的数据源(DataSource),包括用户名、密码、驱动类名和数据库连接URL。
2.指定了MyBatis的mapper文件路径,使用通配符*.xml表示所有以xml结尾的文件。
3.设置了日志级别,将com.easy.dao包下的日志输出级别设为debug,以便在调试时输出更多详细信息。

三、$#的区别

$ 符号:

文本替换:

      当你在XML映射文件中使用 $ 符号时,MyBatis会将它后面的表达式直接替换成对应的值。这种方式类似于简单的字符串替换。

如果 username 的值是 'admin' OR '1'='1,那么最终的SQL语句将会是:

SELECT * FROM user WHERE username = 'admin' OR '1'='1'

# 符号

预编译参数:

     当使用 # 符号时,MyBatis会将它后面的表达式作为预编译语句(PreparedStatement)的参数。这种方式更加安全,因为它会自动处理SQL注入的问题。

将SQL语句的语义确定,之后无论传递任何参数都不会改变SQL语句语义,可以有效防止SQL注入 也可以加快批处理的效率

类型转换:

如果 username 是一个字符串 "admin",那么最终的SQL语句将会是:、

SELECT * FROM user WHERE username = ?

四、增删改

1. 创建数据模型类 (Staff.java)

首先,我们创建一个数据模型类,也就是实体类Staff,它对应数据库中的Staff表。

package com.easy.bean;import java.math.BigDecimal;public class Staff {private int id;private String code;private String name;private BigDecimal salary;private String username;private String userpass;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}public BigDecimal getSalary() {return salary;}public void setSalary(BigDecimal salary) {this.salary = salary;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getUserpass() {return userpass;}public void setUserpass(String userpass) {this.userpass = userpass;}
}

2. 创建数据访问对象接口 (IStaffDao.java)


接着,我们创建一个DAO接口IStaffDao,它定义了对Staff表的操作方法。

package com.easy.dao;import com.easy.bean.Staff;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface IStaffDao {String getNow();
//    操作数据的行数int addStaff(Staff staff);int delStaff(int id);int editStaff(Staff staff);
}

3. 编写Mapper文件 (Staff_Mapper.xml)


然后,我们创建对应的Mapper XML文件,定义具体的SQL语句

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.easy.dao.IStaffDao">
<!--    在这里写SQL语句--><select id="getNow" resultType="string">select now()</select>
<!--    预编译# 将SQL语句的语义确定,之后无论传递任何参数都不会改变SQL语句语义,可以有效防止SQL注入
也可以加快批处理的效率--><insert id="addStaff">insert into staff(code,name,salary,username,userpass)value(#{code},#{name},#{salary},#{username},#{userpass})</insert><delete id="delStaff">delete from staff where id=#{id}</delete><update id="editStaff">update staff set name=#{name},salary=#{salary},username=#{username},userpass=#{userpass} where id=#{id}</update>
</mapper>

4. 创建控制器类 (Controller) (EasyController.java)

最后,我们创建一个控制器类EasyController,用来处理HTTP请求,并通过注入IStaffDao来完成实际的数据操作。

package com.easy.controller;import com.easy.bean.Staff;
import com.easy.dao.IStaffDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.math.BigDecimal;@RestController
public class EasyController {@AutowiredIStaffDao dao;@GetMapping("now")public String now(){return dao.getNow();}@PostMapping("staff")public String addStaff(Staff staff){
//        Staff staff=new Staff();
//        staff.setCode("10001");
//        staff.setName("何容与");
//        staff.setSalary(new BigDecimal(10000));
//        staff.setUsername("hry");
//        staff.setUserpass("123456");dao.addStaff(staff);return "添加成功";}@DeleteMapping("staff/{id}")public String delStaff(@PathVariable int id){dao.delStaff(id);return "删除成功";}@PutMapping("staff")public String editStaff(Staff staff){dao.editStaff(staff);return "修改成功";}
}

相关文章:

MyBatis(学习记录)

一、ORM ORM是“对象关系映射”&#xff08;Object-Relational Mapping&#xff09;的缩写。这是一种编程技术&#xff0c;用于将对象模型与关系型数据库系统之间的数据进行转换。在面向对象的编程语言中&#xff0c;数据通常以对象的形式表示&#xff1b;而在关系型数据库中&a…...

QSpinbox

加载图片资源 在项目中&#xff0c;选择新建&#xff0c;QT->Qt Resource File -choose &#xff0c;命名为 image ,创建完成了&#xff0c;会在目录下生成一个image.qrc。我们资源文件&#xff0c;要放在image.qrc 的同级目录或子目录中。 常用的小功能 在左下方&#x…...

分布式服务架构[原理、设计与实践]学习笔记

地震是由不可抗力导致的&#xff0c;而事故与之不同&#xff0c;任何大的生产事故在发生之前都有迹可循&#xff0c;而且事故的发生并不是偶然的&#xff0c;我们应该善于从现象中总结规律&#xff0c;找到发现、止损和避免的方法 海恩法则 每一起严重事故的背后&#xff0c;必…...

PDF发票解析并将信息回填到前端(1)后端解析PDF

文章目录 参考文章技术栈需求解析发票类型 1. 最终项目结构1.1 说明 2. 相关代码2.1 导入相应的maven依赖2.2 实体类2.3 工具类2.4 三层架构controllerservicemapper 参考文章 参考文章 技术栈 SpringBootVue 需求 本文主要是实现提取发票中的部分内容&#xff0c;并实现自…...

C++练习之插入删除

#include <iostream> #include <ctime> #include <cstring> #include<cstdlib> using namespace std;typedef struct bookInfo {char name[10];float price;int num; }BOOKINFO;// p: 结构体数组首元素地址 // n: 有效图书数量 void Print(const BOOKI…...

【LeetCode】238. 除自身以外数组的乘积

除自身以外数组的乘积 题目描述&#xff1a; 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请…...

Excel公式与函数(运算符,计算限制,错误检查)(一)

公式 公式概念 公式 是以“”号为引导&#xff0c;用过运算符按照一定的顺序组合进行数据运算处理的等式&#xff0c;函数 则是按特定算法执行计算的产生一个或一组结果的预定义的特殊公式。 公式组成要素 公式的组成要素为“”&#xff0c;运算符&#xff0c;单元格引用&a…...

用AI助手写程序

用AI帮助写程序究竟靠不靠谱&#xff0c;下面来测试一下&#xff1a; 在文心一言中输入&#xff1a;写一个C Windows API串口通信程序。结果如下&#xff1a; #include <windows.h> #include <iostream> // 串口配置 void ConfigureCommPort(HANDLE hComm) {…...

动手学深度学习7.2 使用块的网络(VGG)-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;25 使用块的网络 VGG【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址&#xff1a;7.2. 使用…...

SolidityFoundry ERC4626

ERC4626简介 ERC4626 协议是一种用于代币化保险库的标准。 我们经常说 DeFi 是货币乐高&#xff0c;可以通过组合多个协议来创造新的协议&#xff1b; ERC4626 扩展了 ERC20 代币标准&#xff0c;旨在推动收益金库的标准化&#xff0c;它是 DeFi 乐高中的基础&#xff0c;它允…...

大模型时代的操作系统:融合 Rust 和大模型,打造 AI 操作系统

每次技术革命&#xff0c;无论是个人电脑、互联网还是移动设备&#xff0c;总是从硬件开始&#xff0c;然后演化到软件层。而操作系统是计算机系统的核心&#xff0c;没有它&#xff0c;计算机就只是一堆硬件&#xff0c;无法运行任何程序。 微软 CEO 萨蒂亚纳德拉曾将生成式 …...

【ML】为什么要做batch normlization,怎么做batch normlization

为什么要做batch normlization&#xff0c;怎么做batch normlization 1. batch normlization1.1 批量归一化是什么&#xff1a;1.2 为什么要做批量归一化&#xff1a; 2. feature normalization2.1 特征归一化是什么&#xff1a;2.2 为什么要做特征归一化&#xff1a; 3. batc…...

【C++指南】命名空间

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 一、命名空间的重要性 1. C语言中没有命名空间而存在的问题 2. C引入了命名空间解决的问题 3.…...

RocketMQ Dashboard安装

RocketMQ Dashboard 是一个基于 Web 的管理工具&#xff0c;用于监控和管理 RocketMQ 集群。它提供了一个用户友好的界面&#xff0c;使管理员能够轻松地查看和操作 RocketMQ 系统中的各种组件和状态。 主要功能包括&#xff1a; 集群管理: 监控和管理 NameServer 和 Broker …...

前端web开发HTML+CSS3+移动web(0基础,超详细)——第3天

目录 一&#xff0c;列表-无序和有序的定义列表 二&#xff0c;表格-基本使用与表格结构标签 三&#xff0c;合并单元格 四&#xff0c;表单-input标签 五&#xff0c;表单-下拉菜单 六&#xff0c;表单-文本域 七&#xff0c;表单-label标签 八&#xff0c;表单-按钮 …...

认识MySQL

目录 数据库是什么呢&#xff1f;MySQL 数据库是什么呢&#xff1f; 在我们开始学习MySQL之前&#xff0c;先来了解一下&#xff0c;什么是数据库呢&#xff1f;我相信此时很多人会说是管理数据的&#xff0c;完全正确&#xff01;用数据库我们可以去存储大量的数据。我来给你…...

尚品汇-创建ES索引库(二十七)

目录&#xff1a; &#xff08;1&#xff09;商品检索功能介绍 &#xff08;2&#xff09;根据业务搭建数据结构 &#xff08;3&#xff09;nested 介绍 &#xff08;4&#xff09;搭建service-list服务 &#xff08;5&#xff09;构建实体与es mapping建立映射关系 &…...

设计模式-六大原则

概述 设计模式的六大原则是设计模式的基础&#xff0c;了解设计模式的原则&#xff0c;有利于设计模式实际应用的理解&#xff0c;在真实使用的时候&#xff0c;一般不太可能一个程序满足所有的设计模式六大原则&#xff0c;或多或少都会有违背设计模的地方&#xff0c;所以不…...

MyBatis搭建和增删改查

MyBatis是一个开源的持久层框架&#xff0c;用于处理数据库的增删改查操作。它能够将Java对象与数据库中的数据进行映射关系的配置&#xff0c;并自动生成对应的SQL语句&#xff0c;从而简化了数据库操作的编码工作。 MyBatis的核心思想是将SQL语句与Java代码分离&#xff0c;…...

【一图学技术】6.反向代理 vs API网关 vs 负载均衡的原理和使用场景

反向代理 vs API网关 vs 负载均衡 一、概念 ​ &#x1f30f;反向代理&#xff08;Reverse Proxy&#xff09;是一种位于服务器和客户端之间的代理服务器。 ​ 它接收来自客户端的请求&#xff0c;并将其转发给后端服务器&#xff0c;然后将后端服务器的响应返回给客户端。客…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...