每日学习之一万个为什么

Mybatis官网

https://mybatis.org/mybatis-3/zh_CN/configuration.html

Myabtis 入参

#{} 与 ${} 区别:前者占位符赋值,后者字符串拼接会在动态field和关键字用到但要防止SQL注入。

SQL中单个参数,占位符中建议写 形参名

如果是多个参数

  • 方案1:形参列表从左到右默认为 arg0 arg1 / param 1 param 2
  • 方案2:@Param(“别名”)

传参是实体类和map 实体类写属性名 map写key

Mybatis 结果集 resultType

DML 返回 int

DQL resultType:

  • 返回类型全限定名
  • Mybatis官网定义的别名
  • 自定义标签设置Object别名
  • @MapKey (value=" ") 加在mapper接口上

主键回显

DML标签中设置 主键回显属性

<insert id="insert" keyProperty="id" keyColumn="id" useGeneratedKeys="true">insert into user (username, password) values (#{username}, #{password})</insert>

主键赋值UUID函数

DML设置 selectkey 标签,标签中设置先执行

<selectKey keyProperty="id" resultType="int" order="AFTER">select REPLACE(UUID(), '-', '') AS id</selectKey>

结果映射 resultMap

推荐看官网

存储表关系(表关系)

  1. 一对一关系 (One-to-One)(hot-to-cold)
    这种关系指的是一个表中的每一条记录与另一个表中的唯一一条记录相关联。
  • 实例: 在一个用户管理系统中,可以将用户的个人信息(如姓名、联系方式等)和用户的认证信息(如密码、安全问题等)分开存储。这样做的好处是可以保护敏感信息,并简化某些操作,比如更换联系方式时不需要修改认证信息。
    表A: Users (用户ID, 姓名, 联系方式)
    表B: UserAuths (用户ID, 密码, 安全问题)
  1. 一对多关系 (One-to-Many)
    这是一种常见关系,表示一个表中的单条记录可以关联到另一个表中的多条记录。
  • 实例: 在订单处理系统中,一个客户可以下多个订单,但每个订单只属于一个客户。
    表A: Customers (客户ID, 客户名)
    表B: Orders (订单ID, 订单日期, 客户ID) 这里客户ID作为外键指向Customers表的客户ID。
  1. 多对多关系 (Many-to-Many)
    在这种关系中,一个表中的任何记录都可以关联到另一个表中的任意数量的记录,反之亦然。这种情况通常需要通过第三个表来实现,称为连接表或桥接表。
  • 实例: 在一个课程注册系统中,学生可以选择多个课程,同时每个课程也可以由多名学生选修。
    表A: Students (学生ID, 学生名)
    表B: Courses (课程ID, 课程名)
    桥接表: StudentCourse (学生ID, 课程ID) 其中学生ID和课程ID分别是两个主表的外键。
  1. 自引用关系 (Self-referencing Relationship)
    有时候,表中的记录可能需要与同一张表中的其他记录建立联系,这被称为自引用关系。
  • 实例: 在一个员工管理系统中,可能存在上级和下属的关系,即一名员工可能是另一名员工的直接上司。
    表: Employees (员工ID, 员工名, 上司ID) 这里的上司ID也是该表的一个字段,形成自引用关系。

查询表关系

查询操作是在某个表的角度去思考,设计查询结果集

设计忠告

  • 只有真实发生多表查询时,才需要设计和修改实体类,否则不提前设计和修改实习类。
  • 无论多少张表查,实体类设计都是两两考虑
  • 在查询映射的时候,只需要关注本次查询的相关属性

多表查询案例

要求文件+SQL:

CREATE TABLE t_student(sid INT AUTO_INCREMENT PRIMARY KEY,sname VARCHAR(20));  
INSERT INTO t_student(sid,sname) VALUES(1,"二狗子"),(2,"驴蛋蛋");CREATE TABLE t_detail(sid INT PRIMARY KEY,age INT , height DOUBLE(4,1));  
INSERT INTO t_detail(sid,age,height) VALUES(1,18,180.5),(2,19,163.4);CREATE TABLE t_score(cid INT AUTO_INCREMENT PRIMARY KEY,cnum INT , sid INT ,uid INT);  
INSERT INTO t_score(cid,cnum,sid,uid) VALUES(1,80,1,1),(2,90,1,2),(3,70,2,1),(4,95,2,2);CREATE TABLE t_course(uid INT AUTO_INCREMENT PRIMARY KEY,uname VARCHAR(20));  
INSERT INTO t_course(uid,uname) VALUES(1,"java"),(2,"php");#需求1: 查询所有学生和学生详情信息
SELECT * FROM t_student ts JOIN t_detail td ON ts.sid = td.sid;
#需求2: 查询指定id的学生和学生分数信息
SELECT * FROM t_student ts JOIN t_score tc ON ts.sid = tc.sid WHERE ts.sid = 1;
#需求3: 查询全部分数和分数对应的课程
SELECT * FROM t_score tc JOIN t_course tu ON tc.uid = tu.uid;
#需求4: 查询全部学生和学生的分数以及分数对应的课程
SELECT * FROM t_student ts JOIN t_score tc ON ts.sid = tc.sid JOIN t_course tu ON tc.uid = tu.uid;
#需求5: 查询指定id的学生信息和详细信息以及分数和课程信息
SELECT * FROM t_student ts JOIN t_detail td ON ts.sid = td.sidJOIN t_score tc ON ts.sid = tc.sid JOIN t_course tu ON tc.uid = tu.uid;

工程结构:
在这里插入图片描述
Mapper映射参考:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace等于mapper接口类的全限定名 -->
<mapper namespace="com.qxy.mapper.StudentMapper"><resultMap id="map1" type="StudentDetail"><id column="sid" property="sid"/><result column="sname" property="sname"/><association property="detail" javaType="detail"><result property="age" column="age"/><result property="height" column="height"/></association></resultMap><resultMap id="map2" type="StudentScore"><id column="sid" property="sid"/><result column="sname" property="sname"/><collection property="scores"  ofType="Score"><id column="cid" property="cid"/><result column="cnum" property="cnum"/></collection></resultMap><resultMap id="map3" type="ScoreCourse"><id column="cid" property="cid"/><result column="cnum" property="cnum"/><association property="course" javaType="Course"><id column="uid" property="uid"/><result column="uname" property="uname"/></association></resultMap><resultMap id="map4" type="StudentScoreCourse"><id column="sid" property="sid"/><result column="sname" property="sname"/><association property="scoreCourse" javaType="ScoreCourse"><id column="cid" property="cid"/><result column="cnum" property="cnum"/><association property="course" javaType="Course"><id column="uid" property="uid"/><result column="uname" property="uname"/></association></association></resultMap><resultMap id="map5" type="StudentDetailScoreCourse"><id column="stid" property="sid"/><result column="sname" property="sname"/><association property="detailScoreCourse" javaType="DetailScoreCourse"><result property="age" column="age"/><result property="height" column="height"/><collection property="scoreCourse" ofType="ScoreCourse"><id column="cid" property="cid"/><result column="cnum" property="cnum"/><association property="course" javaType="Course"><id column="uid" property="uid"/><result column="uname" property="uname"/></association></collection></association></resultMap><select id="selectAll" resultMap="map1">SELECT * FROM t_student ts JOIN t_detail td ON ts.sid = td.sid;</select><select id="selectScoreBySid" resultMap="map2">SELECT * FROM t_student ts JOIN t_score tc ON ts.sid = tc.sid WHERE ts.sid = #{sid};</select><select id="selectScoreCourseByuid" resultMap="map3">SELECT * FROM t_score tc JOIN t_course tu ON tc.uid = tu.uid;</select><select id="selectStudentScoreCourseBysid" resultMap="map4">SELECT * FROM t_student ts JOIN t_score tc ON ts.sid = tc.sidJOIN t_course tu ON tc.uid = tu.uid;</select><select id="selectStudentDetailScoreCourseBySid" resultMap="map5">SELECT * FROM t_student ts JOIN t_detail td ON #{sid} = td.sidJOIN t_score tc ON #{sid} = tc.sidJOIN t_course tu ON tc.uid = tu.uid;</select>
</mapper>

Maven依赖:

    <dependencies><!-- mybatis依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.11</version></dependency><!-- MySQL驱动 mybatis底层依赖jdbc驱动实现,本次不需要导入连接池,mybatis自带! --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version></dependency><!--junit5测试--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.3.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.36</version></dependency></dependencies>

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

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

相关文章

SpringBoot注解驱动CRUD工具:spring-avue-plus

项目背景 作为一个后端小伙伴&#xff0c;最大的痛点就是写完的接口需要拥有一些可视化的页面去承载这些功能使用【如果是只给后端那么swagger也足够了&#xff0c;非后端有点呛】如果有专业前端去弄确实也快&#xff0c;但是小公司呀~~~ 学呗~妈呀&#xff0c;现在的前端也挺…

manus对比ChatGPT-Deep reaserch进行研究类学术相关数据分析!谁更胜一筹?

没有账号&#xff0c;只能挑选一个案例 一夜之间被这个用全英文介绍全华班出品的新爆款国产AI产品的小胖刷频。白天还没有切换语言的选项&#xff0c;晚上就加上了。简单看了看团队够成&#xff0c;使用很长实践的Monica创始人也在其中。逐渐可以理解&#xff0c;重心放在海外产…

蛋白质功能预测论文阅读记录2025(DPFunc、ProtCLIP)

前言 最近研究到瓶颈了&#xff0c;怎么优化都提升不了&#xff0c;遂开始看点最新的论文。 DPFunc 2025.1.2 Nature Communication 中南大学 论文地址&#xff1a;DPFunc: accurately predicting protein function via deep learning with domain-guided structure inform…

c语言经典案例题

1. 交换两个数的值&#xff1a; #include <stdio.h> #define CRT_SECURE_NO_WARNINGS int main() {int a 5, b 10, c 0;c a;a b;b c;printf("a%d b%d", a, b); } 2. 键盘录入一个数组判断数组最大值&#xff1a; #include <stdio.h> #define CR…

facebook游戏投广:提高广告关键数据的方法

在当今竞争激烈的数字营销领域&#xff0c;游戏广告的投放效果直接关系到游戏公司的市场表现和盈利能力。然而&#xff0c;许多游戏公司在广告投放上面临着诸多挑战&#xff0c;如高昂的成本、低效的转化率以及难以追踪的效果。那么&#xff0c;如何才能通过数据分析真正提升游…

《MySQL数据库从零搭建到高效管理|库的基本操作》

目录 一、数据库的操作 1.1 展示数据库 1.2 创建数据库 1.3 使用数据库 1.4 查看当前数据库 1.5 删除数据库 1.6 小结 二、常用数据类型 2.1 数值类型 2.2 字符串类型 2.3 日期类型 一、数据库的操作 打开MySQL命令行客户端&#xff0c;安装完MySQL后会有两个客户端…

告别复杂日志解析 用bin2sql轻松实现MySQL数据闪回

mysqlbinlog⼯具使用 use test; CREATE TABLE t1 (id INT(11) NOT NULL AUTO_INCREMENT,name VARCHAR(20) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;INSERT INTO t1(id, name) SELECT 101, tome101; INSERT INTO t1(id, name) SELECT 102, tome1…

工业三防平板AORO-P300 Ultra,开创铁路检修与调度数字化新范式

在现代化铁路系统的庞大网络中&#xff0c;其设备维护与运营调度的精准性直接影响着运输效率和公共安全。在昼夜温差大、电磁环境复杂、震动粉尘交织的铁路作业场景中&#xff0c;AORO-P300 Ultra工业三防平板以高防护标准与智能化功能体系&#xff0c;开创了铁路行业移动端数字…

Microsoft Dragon Copilot:医疗AI革命开启,用语音终结手写病历时代

微软正式发布全球首个医疗行业一体化语音AI助手Microsoft Dragon Copilot,标志着临床工作流程正式迈入“人机协作”新时代。这款工具通过语音+文本混合架构,将医生口述内容实时转化为结构化病历,并深度整合电子健康记录(EHR)系统,彻底颠覆了传统手写病历模式。根据微软官…

数据库约束

数据库约束 1. NULL约束2. UNIQUE&#xff1a;唯一约束3. DEFAULT&#xff1a;默认值约束4. PRIMARY KEY&#xff1a;主键约束5. FOREIGN KEY&#xff1a;外键约束6. CHECK约束 数据库约束是关系型数据库的一个重要功能&#xff0c;主要作用是保证数据的正确性&#xff0c;也就…

NetAssist 5.0.14网络助手基础使用及自动应答使用方案

以下是NetAssist v5.0.14自动应答功能的详细使用步骤&#xff1a; 一、基础准备&#xff1a; 工具下载网址页面&#xff1a;https://www.cmsoft.cn/resource/102.html 下载安装好后&#xff0c;根据需要可以创建多个server&#xff0c;双击程序图标运行即可&#xff0c;下面…

ChatGPT课件分享(37页PPT)

资料解读&#xff1a;ChatGPT课件分享 详细资料请看本解读文章的最后内容。 近年来&#xff0c;人工智能技术的迅猛发展引发了全球范围内的广泛关注&#xff0c;尤其是以OpenAI为代表的公司在自然语言处理领域的突破性进展&#xff0c;彻底改变了人机交互的方式。本文将详细解…

【机器学习】主成分分析法(PCA)

【机器学习】主成分分析法&#xff08;PCA&#xff09; 一、摘要二、主成分分析的基本概念三、主成分分析的数学模型五、主成分分析法目标函数公式推导&#xff08;梯度上升法求解目标函数&#xff09;六、梯度上升法求解目标函数第一个主成分七、求解前n个主成分及PCA在数据预…

【蓝桥杯—单片机】第十五届省赛真题代码题解析 | 思路整理

第十五届省赛真题代码题解析 前言赛题代码思路笔记竞赛板配置建立模板明确基本要求显示功能部分频率界面正常显示高位熄灭 参数界面基础写法&#xff1a;两个界面分开来写优化写法&#xff1a;两个界面合一起写 时间界面回显界面校准校准过程校准错误显示 DAC输出部分按键功能部…

重邮数字信号处理-实验六用 MATLAB 设计 IIR 数字滤波器

一、实验目的 1、加深对 IIR 数字滤波器设计方法和设计步骤的理解&#xff1b; 2、掌握用模拟滤波器原型设计 IIR 数字滤波器的方法&#xff1b; 3、能编写 MATLAB 函数&#xff0c;掌握设计 IIR 数字滤波器的函数调用方法&#xff1b; 4、根据不同的应用场景&#xff0…

Linux中的基本指令(下)

目录 mv指令 more指令 less指令 head指令 tail 指令 继续理解文件 重定向和追加重定向操作 理解管道 find指令 whereis 指令 bc指令 uname ‒r指令 grep 指令 关机 扩展命令 zip/unzip 指令 tar指令 关于rzsz 系统间的文件互传 接上&#xff01; mv指令 m…

Python文件,模块

一.文件 1.生成一个文件: 2. 提示 : 第二次读时因为之前已经对文件进行了读取操作&#xff0c;文件指针可能已经移动到了文件末尾。在这种情况下&#xff0c;再次调用 read() 方法将不会读取到任何新的内容&#xff0c;因为已经没有未读取的数据了。可以使用 seek() 方法将文…

基于python的升级队列加速决策

a-f大等级是3级 a-c建筑每升1级分别需要8天 d-f建筑每升1级分别需要10天 目前以下建筑队列正在从0级升至1级 建筑A升级需要7天05&#xff1a;16&#xff1a;20 建筑b升级需要06&#xff1a;06&#xff1a;54 建筑c升级需要00&#xff1a;37&#xff1a;00 建筑d升级需要…

编译OpenSSL

OpenSSL简介 OpenSSL是一个用于加密和安全连接的开源软件库。它提供了一系列的加密算法、密码学功能和安全协议的实现&#xff0c;包括SSL&#xff08;Secure Sockets Layer&#xff09;和TLS&#xff08;Transport Layer Security&#xff09;等用于网络安全的协议。OpenSSL可…

Win 转 MacBook Pro 踩坑指南

前言 Window 和 macOS 系统的差异还是很大的&#xff0c;我从 Thinkpad 转用 M1 的 Macbook pro 已经一年了&#xff0c;几乎没有任何不适应&#xff0c;整体感受那是真的牛&#x1f443;&#xff0c;速度和续航惊艳到我了&#xff0c;同时开启 6个 vscode 加几十个浏览器标签…