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

ORM、Mybatis和Hibernate、Mybatis使用教程、parameterType、resultType、级联查询案例、resultMap映射

DAY21.1 Java核心基础

ORM

Object Relationship Mapping 对象关系映射

面向对象的程序到—关系型数据库的映射

比如java – MySQL的映射

ORM框架就是实现这个映射的框架

Hibernate、Mybatis、MybatisPlus、Spring Data JPA、Spring JDBC

Spring Data JPA的底层就是Hibernate

Mybatis和Hibernate

Mybatis是一个JDBC封装的工具,是帮助开发者实现数据持久化 工作的框架

Mybatis和Hibernate的区别?

Mybatis:半自动框架,Mybatis没有实现java对象到数据库表的映射,只实现了java程序和sql之间的映射

Hibernate:全自动框架,开发者只需要调用接口就可以完成相关的操作,整个框架已经封装好,不需要开发者关注

但是全自动框架不灵活,有些业务场景实现并不方便,半自动框架灵活,可以根据具体业务来写sql,更适合现代企业级项目的开发

Mybatis的优缺点

优点:

  • 极大简化了JDBC的开发
  • 更好上手,有更好的灵活性
  • 通过定义sql在xml文件里面降低程序的耦合度
  • 支持动态sql,可以根据业务灵活实现需求

缺点:

  • 数据库迁移的时候需要更改大量的sql语句
  • 相较于Hibernate,需要完成更多的工作,定义sql,设置sql与数据库表的关系

使用教程

使用原生接口:

创建maven工程,导入相关依赖

    <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.31</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.8</version></dependency>

创建实体类User

@Data
public class User  {private Integer id;private String name;private String pwd;private String email;
}

在resource创建一个config.xml的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 配置MyBatis运行环境 --><environments default="development"><environment id="development"><!-- 配置JDBC事务管理 --><transactionManager type="JDBC"></transactionManager><!-- 数据源 --><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mytest1"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments>
</configuration>

两种使用方式:

  • 使用原生接口

  • 使用mapper代理

使用原生接口

创建mapper文件

namespace:通常设置为文件所在包名和文件

UserMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shuwu.mapper.UserMapper"><select id="get" parameterType="int" resultType="com.shuwu.entity.User">select * from user where id = #{id}</select>
</mapper>

在配置文件添加注册mapper,让配置文件可以扫描到

<mappers><mapper resource="com/shuwu/mapper/UserMapper.xml"></mapper>
</mappers>

测试用例:

public class Test {public static void main(String[] args) {// 找到类加载器,通过配置文件的输入流然后创建一个SqlSession工厂InputStream resourceAsStream = Test.class.getClassLoader().getResourceAsStream("com/mybatis-config.xml");SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);// 获取sqlsessionSqlSession sqlSession = build.openSession();// 调用Mybatis原生接口执行sqlString statement = "com.shuwu.mapper.UserMapper.get";User user = sqlSession.selectOne(statement, 1);System.out.println(user);}
}

测试结果:

image-20250407105705462

要确保数据库里面有对应的表结构

1、通过配置文件创建 MyBatis 环境(数据源、Mapper)

2、构建环境需要使用 SqlSessionFactory

使用mapper代理实现自定义接口

自定义接口,开发者只需要定义,不需要实现

定义mapper接口

public interface UserMapper {public User getUserById(Integer id);public List<User> getAllUser();
}

mapper接口映射的xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shuwu.mapper.UserMapper"><select id="getUserById" resultType="com.shuwu.entity.User">select * from user where id = #{id}</select><select id="getAllUser" resultType="com.shuwu.entity.User">select * from user</select>
</mapper>

要注意!!

  • namespace需要指定到mapper接口的文件
  • 方法名和xml里面的id必须一致
  • 返回值的resultType的放回类型必须一致
  • 方法传递参数名字必须对应,如果不一致可以用@Param来声明参数名字

比如:

 public User getUserById(@Param("id") Integer id2);

增加、删除、修改用户

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shuwu.mapper.UserMapper"><insert id="addUser">insert into user(name,pwd,email) values(#{name},#{pwd},#{email})</insert><update id="updateUser" parameterType="com.shuwu.entity.User">update user set name=#{name},pwd=#{pwd},email=#{email} where id = #{id}</update><delete id="deleteUser" parameterType="integer">delete from user where id = #{id}</delete><select id="getUserById" resultType="com.shuwu.entity.User">select * from user where id = #{id}</select><select id="getAllUser" resultType="com.shuwu.entity.User">select * from user</select>
</mapper>
public interface UserMapper {public User getUserById(@Param("id") Integer id2);public List<User> getAllUser();public int addUser(User user);public int deleteUser(@Param("id") Integer id);
}
public static void main(String[] args) {// 找到类加载器,然后创建一个工厂InputStream resourceAsStream = Test.class.getClassLoader().getResourceAsStream("com/mybatis-config.xml");SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);// 获取sqlsessionSqlSession sqlSession = build.openSession();// 获取接口的代理对象UserMapper mapper = sqlSession.getMapper(UserMapper.class);// 添加用户mapper.addUser(new User(null,"shuwu","123","123@qq.com"));// 根据id删除用户mapper.deleteUser(4);// 根据User的id修改用户信息mapper.updateUser(new User(1,"shuwu","123","123@qq.com"));// 提交事务sqlSession.commit();
}

增删改 数据库的时候要注意需要提交事务,不然MySQL只会保存不会添加进数据库

sqlSession.commit();

Mapperxml

全局配置文件 mybatis-config.xml

Mapper 配置文件 UserMapper.xml

mybatis-config.xml:主要用来定义数据源信息和一些基本配置,事务管理、打印 SQL,开启二级缓存、设置延迟加载

UserMapper.xml:定义对应接口方法的 SQL 实现,需要在 mybatis-config.xml 中进行注册才可以使用

半自动化的 ORM 框架,SQL 需要开发者自定义,MyBatis 关注的是 Java 对象和 SQL 之间的关系,SQL 语句是在 Mapper.xml 中定义

parameterType

参数数据类型介绍

包装类型

Integer类型

public int deleteUser(@Param("id") Integer id);
<delete id="deleteUser" parameterType="integer">delete from user where id = #{id}
</delete>

用户的SQL语句是where id = #{id},这里的id可能是int或Integer。如果调用这个方法时传入的是单个参数,比如Integer,MyBatis会自动识别参数类型,不需要显式指定parameterType。

String类型

public User getByUserName(@Param("name") String name);
<select id="getByUserName" resultType="com.shuwu.entity.User">select * from user where name=#{name}
</select>

基本数据类型

int、flout、double…

public User getByAge(int age);
<select id="getByAge" parameterType="int" resultType="com.southwind.entity.User">select * from user where age = #{age}
</select>

实体类

public List<User> getAllUser();
<select id="getAllUser" resultType="com.shuwu.entity.User">select * from user
</select>

5、多个参数

public User getUsernameAndAge(String username,Integer age);
<select id="getUsernameAndAge" resultType="com.southwind.entity.User">select * from user where username = #{param1} and age = #{param2}
</select>

resultType

返回类型

1、基本数据类型

public int getCount();
<select id="getCount" resultType="int">select count(*) from user
</select>

2、包装类

public Integer getCount2();
<select id="getCount2" resultType="java.lang.Integer">select count(*) from user
</select>

3、String

public String getUsernameById(Integer id);
<select id="getUsernameById" parameterType="java.lang.Integer" resultType="java.lang.String">select username from user where id = #{id}
</select>

4、实体类

public User getById(Integer id);
<select id="getById" parameterType="java.lang.Integer" resultType="com.southwind.entity.User">select * from user where id = #{id}
</select>

级联查询

实际开发中常见的是一对多和多对多关系

如果要查询学生信息和班级信息的关系呢?

SELECT student.id sid, student.`name` sname,class.id cid,class.`name` cname from student,class where student.cid = class.id

怎么在java程序中实现呢

先定义一个可以接收这个参数的student对象

@Data
public class Student  {private Integer id;private String name;private Class clazz;
}
@Data
public class Class  {private Integer id;private String name;
}

但是有时候这个字段和数据库里面的字段不匹配怎么办呢?

这个clazz怎么和数据库对应呢?

这个时候就需要写一个字段映射了

mapper接口

public List<Student> getAllStudent();

xml映射

通过使用 resultMap="StudentMap"来设置一个返回值的字段映射

<resultMap id="StudentMap" type="com.shuwu.entity.Student"><id property="id" column="sid"/><result property="name" column="sname"/><association property="clazz" javaType="com.shuwu.entity.Class"><id property="id" column="cid"/><result property="name" column="cname"/></association></resultMap><select id="getAllStudent" resultType="com.shuwu.entity.Student" resultMap="StudentMap">SELECT student.id sid, student.`name` sname,class.id cid,class.`name` cname from student,class where student.cid = class.id
</select>

测试输入:

System.out.println(mapper.getAllStudent());

image-20250407225235917

相关文章:

ORM、Mybatis和Hibernate、Mybatis使用教程、parameterType、resultType、级联查询案例、resultMap映射

DAY21.1 Java核心基础 ORM Object Relationship Mapping 对象关系映射 面向对象的程序到—关系型数据库的映射 比如java – MySQL的映射 ORM框架就是实现这个映射的框架 Hibernate、Mybatis、MybatisPlus、Spring Data JPA、Spring JDBC Spring Data JPA的底层就是Hiber…...

《Java八股文の文艺复兴》第十一篇:量子永生架构——对象池的混沌边缘(终极试炼·完全体)

Tags: - Java高并发 - 量子架构 - 混沌工程 - 赛博修真 - 三体防御 目录&#xff1a; 卷首语&#xff1a;蝴蝶振翅引发的量子海啸 第一章&#xff1a;混沌初开——对象池的量子涅槃&#xff08;深度扩展&#xff09; 第二章&#xff1a;混沌计算——对象复活的降维打击&…...

蓝桥杯备赛---真题训练之15届蓝桥杯找回连接之旅

题目 介绍 在网络世界中&#xff0c;突然间失去了所有的连接。作为勇敢的冒险者&#xff0c;你将踏上一段惊险刺激的旅程&#xff0c;穿越充满谜题和挑战的网络景观&#xff0c;与神秘的网络幽灵对抗&#xff0c;解开断网之谜&#xff0c;找回失去的连接&#xff0c;带领人们重…...

PowerApps MDA-模版-文档模版无法下载和上传Word模版

Power Apps的高级设置-模版中&#xff0c;文档模版目前只能看到新建和上传Excel模版&#xff0c;看不到Word模版 这是一个已知bug, 什么时候能修复不好说&#xff0c;解决办法也很简单&#xff0c;先上传一个Excel模版&#xff0c;随便任何一个实体就行&#xff0c;为的是视图列…...

全国大学生数学建模竞赛赛题深度分析报告(2010-2024)

全国大学生数学建模竞赛赛题深度分析报告&#xff08;2010-2024&#xff09; 全国大学生数学建模竞赛(CUMCM)是中国最具影响力的大学生科技竞赛之一&#xff0c;本报告将对2010-2024年间的赛题进行全面统计分析&#xff0c;包括题目类型、领域分布、模型方法等多个维度&#x…...

职坐标解析自动驾驶技术发展新趋势

内容概要 作为智能交通革命的核心驱动力&#xff0c;自动驾驶技术正以惊人的速度重塑出行生态。2023年&#xff0c;行业在多传感器融合与AI算法优化两大领域实现突破性进展&#xff1a;激光雷达、摄像头与毫米波雷达的协同精度提升至厘米级&#xff0c;而深度学习模型的实时决…...

快速入手-前后端分离Python权限系统 基于Django5+DRF+Vue3.2+Element Plus+Jwt

引用&#xff1a;打造前后端分离Python权限系统 基于Django5DRFVue3.2Element PlusJwt 视频教程 &#xff08;火爆连载更新中..&#xff09;_哔哩哔哩_bibili 说明&#xff1a;1、结合个人DRF基础和该视频去根据自己的项目进行开发。 2、引用该视频中作者的思路去升华自身的项…...

HTTP 协议详解

HTTP 协议 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最广泛的协议之一&#xff0c;用于在客户端&#xff08;如浏览器&#xff09;和服务器之间传输超文本&#xff08;如网页&#xff09;。 HTTP 是万维网&#xff…...

巧记英语四级单词 Unit1-4【晓艳老师版】

tain—take拿着、sus 下面&#xff0c;只有sur表示上面、ob表示方向、de往下&#xff0c;分开 retain v.保持 re-重复&#xff0c;tain—take拿着&#xff0c;重复的拿着maintain v. 维持&#xff0c;维修&#xff0c;保养 main主要的&#xff0c;主要的东西都拿着的那个人维…...

Transformers without Normalization论文翻译

论文信息&#xff1a; 作者&#xff1a;Jiachen Zhu, Xinlei Chen, Kaiming He, Yann LeCun, Zhuang Liu 论文地址&#xff1a;arxiv.org/pdf/2503.10622 代码仓库&#xff1a;jiachenzhu/DyT: Code release for DynamicTanh (DyT) 摘要 归一化层在现代神经网络中无处不在…...

Ollama

目录 定义与核心功能应用场景Ollama与Llama的关系安装与使用 Ollama是一个开源的本地大语言模型&#xff08;LLM&#xff09;运行框架&#xff0c;专为在本地机器上便捷部署和运行大型语言模型而设计。以下是关于Ollama的全面介绍&#xff1a; 定义与核心功能 多种预训练语言模…...

社交app圈子模块0到1实现

一、逻辑分析 用户相关 用户需要能够创建圈子&#xff0c;这涉及到用户身份验证&#xff0c;确保只有注册用户可以进行创建操作。每个圈子有创建者&#xff0c;创建者对圈子有一定的管理权限&#xff0c;如设置圈子规则、邀请成员等。 圈子信息 圈子需要有名称、简介、头像等基…...

OpenCV--图像边缘检测

在计算机视觉和图像处理领域&#xff0c;边缘检测是极为关键的技术。边缘作为图像中像素值发生急剧变化的区域&#xff0c;承载了图像的重要结构信息&#xff0c;在物体识别、图像分割、目标跟踪等众多应用场景中发挥着核心作用。OpenCV 作为强大的计算机视觉库&#xff0c;提供…...

批量压缩 jpg/png 等格式照片|批量调整图片的宽高尺寸

图片格式种类非常的多&#xff0c;并且不同的图片由于像素、尺寸不一样&#xff0c;可能占用的空间也会不一样。文件太大会占用较多的磁盘空间&#xff0c;传输及上传系统都非常不方便&#xff0c;可能会收到限制&#xff0c;因此我们经常会碰到需要对图片进行压缩的需求。如何…...

[Linux系统编程]多线程

多线程 1. 线程1.1 线程的概念1.2 进程与线程对比1.3 轻量级进程 2. Linux线程控制2.1 POSIX 线程&#xff08;pthread&#xff09;2.2 线程ID、pthread_t、和进程地址空间的关系2.2.1 pthread_self2.2.2 pthread_create2.2.3 pthread_join2.2.4 线程终止的三种方式2.2.5 pthre…...

进程状态(运行 阻塞 僵尸)及其场景分析

【Linux学习笔记】Linux基本指令及其分析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 前言 哈喽&#xff0c;各位小伙伴大家好!上期我们讲了进程PCB 今天我们讲的是进程状态(运行 阻塞 僵尸)及其场景分析。话不多说&#…...

程序化广告行业(67/89):DMP系统标签制作与人群拓展深度解析

程序化广告行业&#xff08;67/89&#xff09;&#xff1a;DMP系统标签制作与人群拓展深度解析 大家好&#xff01;在之前的分享中&#xff0c;我们对程序化广告的多个关键环节进行了探讨。今天&#xff0c;咱们继续深入了解程序化广告中的DMP系统&#xff0c;聚焦于标签制作和…...

【QT】QPixmap QImage QBitmap QPicture

文章目录 **1. QPixmap****特点****典型应用场景****示例** **2. QImage****特点****典型应用场景****示例** **3. QBitmap****特点****示例** **4. 三者的主要区别****5. 如何选择&#xff1f;****使用 QPixmap 的情况****使用 QImage 的情况****使用 QBitmap 的情况** **6. 相…...

如何开通google Free Tier长期免费云服务器(1C/1G)

Google宣布的一项政策&#xff0c;为标准层级的网络提供每地域200G的免费流量。两项政策结合&#xff0c;于是便可以得到一台1核心、1G内存、30G磁盘、200G流量的小云服务器&#xff0c;可玩性大大提高。这篇文章就分享一下如何正确开机&#xff0c;避免产生额外的费用。 免费…...

Kaggle房价预测

实战 Kaggle 比赛&#xff1a;预测房价 这里李沐老师讲的比较的细致&#xff0c;我根据提供的代码汇总了一下&#xff1a; import hashlib import os import tarfile import zipfile import requests import numpy as np import pandas as pd import torch from matplotlib i…...

4.7学习总结 java集合进阶

集合进阶 泛型 //没有泛型的时候&#xff0c;集合如何存储数据 //结论: //如果我们没有给集合指定类型&#xff0c;默认认为所有的数据类型都是object类型 //此时可以往集合添加任意的数据类型。 //带来一个坏处:我们在获取数据的时候&#xff0c;无法使用他的特有行为。 //此…...

设计模式 - 代理模式Proxy

设计思想&#xff1a; 举个通俗的例子&#xff0c;你想找某局长帮你做一件事情&#xff0c;但局长官位显赫&#xff0c;你又不能轻易见着&#xff0c;你就想到了找他的秘书&#xff0c;通过她传话给局长&#xff0c;这样你就等于请他的秘书帮你办成了那件事。秘书为什么就可以…...

计算机网络体系结构(一)

1.计算机网络概述 1.1计算机网络的概念 计算机网络是由相互连接的计算机及其周边设备构成的系统&#xff0c;这些计算机和设备通过各种通信介质实现数据和资源的共享。计算机网络的主要目的是为了增强信息传递的效率、便利性和可靠性。以下是一些计算机网络的关键概念&#xf…...

数据结构与算法-数学-基础数学2(扩展欧几里得算法,组合数问题)

六&#xff1a;扩展欧几里得算法 同余&#xff1a; 若 a≡b(modm)&#xff0c;则 m 整除 a−b&#xff0c;即 abkm&#xff08;k 为整数&#xff09;。 扩展欧几里得算法 扩展欧几里得算法可用于求解 axbygcd(a,b) 的一组整数解。 #include <iostream> using namesp…...

【力扣hot100题】(072)柱状图中的最大矩阵

这绝对是我做过印象最深的算法题之一。&#xff08;还有是那道盛水最多的贪心题&#xff09; 当初不知道想了多少个日日夜夜&#xff0c;所幸这道题已经深深的烙印在了我的脑海里。 现在看来也没那么可怕&#xff08;&#xff09;不过初见确实非常难想到单调栈。 方法如下&a…...

T-SQL语言的压力测试

T-SQL语言的压力测试 随着数据驱动技术的发展&#xff0c;数据库在现代应用中的角色愈加重要。而在数据库管理系统中&#xff0c;微软的SQL Server凭借其强大的功能和易用性&#xff0c;广泛应用于各行业。在这一环境中&#xff0c;T-SQL&#xff08;Transact-SQL&#xff09;…...

debian 系统gnome怎么关闭触摸屏三指滑动

ubuntu如何限制三指手势操作_ubuntu 手势-CSDN博客 参考方案给上面了, kiosk模式 就是专用模式,类似于广告机、售货机那种。 方案 在 Debian 系统的 GNOME 桌面环境中,可以通过以下方法关闭触摸屏三指滑动功能: 安装 gnome-tweaks 工具:...

【9】搭建k8s集群系列(二进制部署)之安装work-node节点组件(kube-proxy)和网络组件calico

承接上一篇文章&#xff0c;继续安装工作节点的第二个组件&#xff1a;kube-proxy 一、创建配置文件 cat > /opt/kubernetes/cfg/kube-proxy.conf << EOF KUBE_PROXY_OPTS"--logtostderrfalse \\ --v2 \\ --log-dir/opt/kubernetes/logs \\ --config/opt/kubern…...

MongoDB及Yapi迁移数据

一、MongoDB安装及迁移 1、导入MongoDB GPG密钥 sudo rpm --import https://www.mongodb.org/static/pgp/server-5.0.asc 2、创建MongoDB 安装源配置文件 vi /etc/yum.repos.d/mongodb-org-5.0.repo&#xff0c;添加以下内容&#xff1a; [mongodb-org-5.0] nameMongoDB Repo…...

高效解读机器语言,profinet转ethernet ip网关烟草企业自动化升级案例分析

工业通信协议转换在烟草生产线的实践应用 某中型烟草生产企业为提高自动化水平&#xff0c;引进了西门子S7-1500系列PLC控制系统和防爆型科氏力质量流量计。但在系统集成阶段&#xff0c;技术人员发现PLC支持的PROFINET协议与流量计采用的EtherNet/IP协议存在互操作障碍&#x…...

使用Scade实现神经网络算法

在ERTS2022中&#xff0c;ANSYS 发表了使用Scade实现神经网络AI算法的相关工作。论文题目为《Programming Neural Networks Inference in a Safety-Critical Simulation-based Framework》 背景与挑战 神经网络在安全关键系统中的应用&#xff1a;随着嵌入式系统中自主性的引入…...

rom定制系列------小米10pro机型定制解锁固件 原生安卓15批量线刷固件 操作解析与界面预览

注意;固件用于自己机型忘记密码或者手机号注销等出现设备锁 过保修期 售后无视的机型&#xff0c;勿用于非法途径 目前有粉丝联系&#xff0c;自己的机型由于手机号注销导致手机更新系统后出现设备锁界面。另外也没有解锁bl。目前无法使用手机。经过询问是小米10pro机型。根据…...

2023年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2023年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛&#xff08;China Undergraduate Mathematical Contest in Modeling&#xff09;是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动&#xff0c;目的在于激…...

2014年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2014年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...

【Docker基础】--查阅笔记1

目录 Docker是什么Docker解决什么问题Docker的理念Docker基本组成镜像&#xff08;image&#xff09;容器&#xff08;container&#xff09;仓库&#xff08;registry&#xff09; Docker平台架构Docker基本实现原理 Docker常用命令总结 Docker是什么 Docker解决什么问题 统…...

算法(动态规划)

动态规划 基本思想 将问题分解为相互重叠的子问题 定义子问题&#xff1a;将原问题分解为若干个子问题。确定状态转移方程&#xff1a;找到子问题之间的递推关系。边界条件&#xff1a;确定初始状态的值。递推计算&#xff1a;根据状态转移方程和边界条件逐步计算子问题的解。…...

2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡

2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡 在 2025 年这个科技浪潮奔涌的时代&#xff0c;软件开发领域持续变革&#xff0c;前端与后端开发方向的抉择&#xff0c;成为众多从业者和爱好者亟待破解的关键命题。卓伊凡就频繁收到这样的疑问&#xff1a;“2025 年了&…...

指纹浏览器技术架构解析:高并发批量注册业务的工程化实践——基于分布式指纹引擎与防关联策略的深度实现

一、技术背景与行业痛点 在跨境电商、广告投放、问卷调查等场景中&#xff0c;批量注册与多账号矩阵运营已成为刚需。然而&#xff0c;主流平台&#xff08;如亚马逊、Facebook、Google&#xff09;的风控系统通过浏览器指纹追踪&#xff08;Canvas/WebGL/WebRTC等&#xff09…...

基于SpringBoot的“智慧医疗采购系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“智慧医疗采购系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 局部E-R图 系统首页界面 系统…...

codeforces B. Large Array and Segments

题目简述&#xff1a; 给定一个长度为n的数组&#xff0c;以及两个整数k和p&#xff0c;该数组可以通过复制在增加长度&#xff0c;可以复制k次&#xff0c;我们最后要找到保证后缀和至少为p的首元结点的数量 思路简述&#xff1a; 找到有多少个完整的原数组n&#xff0c;最…...

VS Code-i18n Ally国际化插件

前言 本文借鉴&#xff1a;i18n Ally 插件帮你轻松搞定国际化需求-按模块划分i18n Ally 是一款 VS Code 插件&#xff0c;它能通过可视 - 掘金本来是没有准备将I18n Ally插件单独写一个博客的&#xff0c;但是了解过后&#xff0c;功能强大&#xff0c;使用方便&#xff0c;解决…...

ResNet改进(21):基于ECA注意力机制的ResNet18网络实现

一、引言 在计算机视觉领域,ResNet(残差网络)一直是图像分类任务中的重要基准模型。今天我们要介绍的是一个改进版的ResNet18网络,它在传统ResNet结构的基础上加入了ECA(Efficient Channel Attention)注意力机制,能够在不显著增加计算量的情况下提升模型性能。 二、网络…...

[ERROR] Some problems were encountered while processing the POMs

记录一次maven的错误 问题复现&#xff1a; 我在ruoyi-vue-plus项目的ruoyi-modules中新建了一个子项目ruoyi-network-telphonem,然后某一次编译的时候提示SysTenantServiceImpl找不到无参的构造函数&#xff0c;检查了很久都没发现问题&#xff0c;于是我想着删掉本地maven仓…...

【网络协议】WebSocket讲解

目录 webSocket简介 连接原理解析: 客户端API 服务端API&#xff08;java&#xff09; 实战案例 &#xff08;1&#xff09;引入依赖 &#xff08;2&#xff09;编写服务端逻辑 &#xff08;3&#xff09;注册配置类 &#xff08;4&#xff09;前端连接 WebSocket 示例…...

什么是可靠性工程师?

一、什么是可靠性工程师&#xff1f; 可靠性工程师就是负责确保产品在使用过程中不出故障、不给客户添麻烦。 你可以理解为是那种“挑毛病的人”&#xff0c;但不是事后挑&#xff0c;是提前想清楚产品在哪些情况下可能会出问题&#xff0c;然后解决掉。 比如&#xff1a; …...

Next.js + SQLite 项目 Docker 生产环境部署方案

以下是完整的 Next.js SQLite 项目 Docker 生产环境部署方案&#xff1a; 1. 项目结构准备 your-project/ ├── prisma/ │ ├── schema.prisma │ └── migrations/ ├── app/ ├── lib/ ├── Dockerfile ├── docker-compose.yml ├── .dockerignore └…...

记录1---20250407

哈佛结构&#xff1a;指令和数据放在不同的存储器&#xff0c;因为在使用流水线时&#xff0c;方便数据和指令的读取和存入。 冯诺依曼结构&#xff1a;指令和数据放在同一个存储器。 处理器的存储结构&#xff1a;CPU内部采用hierarchy 存储结构&#xff0c;一般由 CPU内部…...

php调用大模型应用接口实现流式输出以及数据过滤

最近开发智能客服&#xff0c;需要用php调用已有的大模型应用接口流式输出vue前端调用打字机效果展示。这里整理了php调用大模型流式输出业务过滤等的核心实现部分&#xff0c;分享给大家。 前置条件&#xff1a;大模型应用接口已经打通&#xff08;最好是通过postman或者apip…...

数据结构:红黑树

为什么要以这个结构为题&#xff1f;那就要追溯到CSTL库中的两种map/set&#xff0c;分别基于红黑树与哈希表&#xff0c;我是根本分不清楚。为了搞清楚其区别&#xff0c;我会重点聊聊红黑树和哈希表。 当然也会简单介绍一下树的结构。 树 Tree 首先需要简单了解树这个数据结…...

nginx配置ssl证书,实现https安全访问.

前置条件: 名称 ip地址端口号nginx服务器192.168.59.3080/443server服务器190.168.59.318080/8081/8082 安装nginx服务: 参见: 编译安装nginx-CSDN博客 启动后端web服务器192.168.59.31: (#后端要被代理的web服务器要有docker服务并且配置相关的加速服务) 拉取tomcat容器…...