SpringCloud微服务01-MybatisPlus-Docker

news2024/11/25 4:58:50
https://b11et3un53m.feishu.cn/wiki/MWQIw4Zvhil0I5ktPHwcoqZdnec

一、微服务介绍

单体架构所有功能集群在一个架构中,难以维护复杂需求

微服务之间是不同的TomCat要跨服务查询,

学习是如何拆分单体架构为微服务

二、MybatisPlus

1.快速入门

①入门案例

这个mapper继承BaseMapper后就可以直接使用它的方法,增删改查。

②常见注解

继承就可以直接操作对应的数据表原因在于实体类,我们需要遵循一些约定才能自动实现

如果有不想遵循这些约定的内容就需要在实体类中注解。

③常见配置

除了实体包名和mapper地址,其余都是默认设置即可。
MyBatisPlus适合单表查询,多表还是需要自己写SQL

2.核心功能

①条件构造器

where的条件不一定是id可能更加负责,Wrapper

案例:

上述查询例子可以改成如下Lambda形式,避免了硬编码

②自定义SQL

使用MP违反了在逻辑层操作数据库的规则

自定义SQL,where条件过于复杂时采用Wrapper构建where条件,然后传入mapper,然后只需要写除where条件以外的内容就行,注解或者xml都行
注意:mapper层接收时wrapper必须有如下注解

③Service接口

基础用法

查一个get,查多个list

自定义接口继承IService,自定义实现类继承ServiceImpl

在继承ServiceImpl时要确定mapper和实体类

使用时在serviceImp中注入对应service类

案例-基础业务和复杂业务

如果没有涉及到逻辑操作,只是对数据库进行增删改查直接只需要controller即可:
第5个业务代码可以判读是否状态正常,正常再扣钱,需要自定义service和mapper
controller:
这里的userService是,不推荐Autowired注入。
构造函数:(这种写起来太复杂)

可以通过final定义常量以及加RequiredArgsConstructor注解来通过构造函数实现注入。
lombok注解可以生成构造函数,定义为常量后就必须在初始化的时候注入使用RequiredArgsConstructor只会注入常量的


service:

案例-IService的Lambda查询

原生Mybatis

controller:

service:这里参数中前面condition中填入SQL中if条件


最后的.list()可以改成.one(),.page(),.count(),来操作得到的不同的数据。

这里如果有多个线程的话可能会造成并发,可以加一个判断我的查询的余额是否和之前得到的余额相同,相同才扣钱。乐观锁

案例-IService批量新增

减少了网络请求,但是如果没设置为true,sql驱动还是一条一条语句插入


在数据库配置文件这里url后面加上设置参数为true,SQL驱动就会将很多条插入语句拼成下述语句

3.扩展功能

①代码生成

使用MybatisPlus一些基础步骤,实体类,mapper,service,serviceImpl继承类

代码生成就可以根据数据库中的表生成这些代码
步骤:
下载插件

下载好后点击Other中的Config Database将数据库信息填进去

第二步,点击这里设置生成代码的配置,点击generate就可以生成

②静态工具

需要传入Class字节码,除了save和update

涉及到多表查询可以,注入那个表对应的service,可能会发生循环依赖,这时候可以使用静态工具进行查询,注入mapper没mp,service强大

需求①,在userServiceImpl中涉及到它表查询可以使用使用DB静态工具,指定字节码即可

需求②

这里逻辑就是根据id查询到所有user然后,在地址表中查询到每个userId对应的地址(可能有多个)形成一个地址列表,然后使用stream流中的groupingBy方法根据userId分组形成map数据。最后再根据user的列表遍历封装uservo。

这里有两个stream流的使用:
1.将List列表中对象的某一个字段形成新的列表可以使用

List<Long> userTds = users.stream().map(User ::getId).collect(Collectors.toList());

2.就是对列表中的对象分组。

③逻辑删除

如果采用逻辑删除就要加上额外的逻辑判断

mp中配置一下表中代表逻辑删除的字段名叫什么?这里是flag

④枚举处理器

用枚举类型代表状态,但是表中仍然是Int类型,mybatis有个TypeHandler就可以实现类型转换
对枚举类进行注解EnumValue就代表转化的是哪一个字段,JsonValue加在什么字段上就代表返回的是什么类型的值枚举。

第二步进行配置

⑤JSON处理器


做两步,在字段上加上这个注解开启JSON类型转换器,在类上TableName中加上autoResultMap等于true

4.插件功能

①page分页插件

想要使用什么插件要在配置类中进行配置

pageNo是页码,pageSize是一页有多少数据

②通用分页实体

定义一个通用分页实体类

其他具体实体类继承这个通用类

定义分页查询通用返回类:

controller:

service:

封装page和封装结果与业务不太相关,可以用个工具类,这里是在类中定义

在pageQuery定义方法:

重载一个用creatTime排序的方法

在pageDTO中定义方法:

上述service:

如果说我拷贝的uservo中有字段名与user不一致,需要自己写copy就可以写个重载方法:

这里需要传入一个function函数

三、Docker

快速构建、运行、管理应用的工具,运维的工具

传统linx部署很麻烦,Docker可以一键部署

1.快速入门

docker这里的镜像就类似于绿色安装包,下载好后就可以使用,并且软件镜像之间相互隔离


安装应用后,会在本地下载镜像,运行镜像就会创造容器,一个镜像可以创造多个容器
容器间是相互隔离的,多实例部署,形成集群,没有干扰;一个服务也可以部署多个不同应用的实例
docker在部署的时候忽略了安装的过程,系统的差异,系统间的干扰,应用间的干扰

2.命令解读

docker的命令都以docker开始,docker run和-d一般绑定使用这样就可以不影响其他操作

设置端口映射这里:每一个容器都相当于一个微型的服务器有自己的ip和端口号不对外访问,我们只能访问到外部的虚拟机的ip,然后这里3306:3306就代表访问外部的端口3306就会访问内部这个服务器的3306端口。如果不同容器都要映射那要改变前面的外部的端口号

cd ~ 返回根目录

3.Docker基础

①常见命令

对容器的操作:docker start是对关闭的容器进行启动,docker run是创建并允许容器;docker ps是查看容器运行状况;docker rm是删除容器,docker rmi是删除镜像;docker logs是查看容器日志,docker exec是进入容器。

保存docker,不知道具体命令可以加--help

下载tar文件的镜像

查看log:一般加上-f可以追踪日志,ctrl+c退出

进入容器:bash加上就可以就可以进入类似计算机的base操作面板

可以进入容器再连接应用:(类似计算机里连接mysql)

删除容器:

由于查看容器进程显示东西太多,但是格式化代码太长:

首先:输入

vi ~/.bashrc

进入一个文件这里可以定义命令的别名:这里按 i 进入编辑模式,编辑完按Esc进入命令模式,然后按 :wq 保存并退出

:wq输入地方在esc后

最后激活:

②数据卷

容器只包含了镜像运行所需的命令或者依赖,直接进入容器进行修改行不通

数据卷可以让宿主机中的实体文件和容器中某一文件进行双向绑定,这样就可以在宿主机中对容器进行修改。

容器挂载数据卷:只能在创建的时候挂载

③本地目录挂载

匿名卷代表的是创建容器时自动创建的卷,例如MYSQL就必须挂载到一个卷中进行数据的增删操作

但是匿名卷的话,如果对MYSQL进行版本升级,创建新的MYSQL容器后就会使数据丢失,所以需要跟本地目录进行挂载

本地目录必须以”/“或”./“开头

首先在本地上创建所需目录

再运行docker run命令

④自定义镜像

分层可以共用基础层,把一些镜像公有的部分分层这样制作省略操作,下载也省略操作,也节省体积

有人已经做好了JDK的配置:

from代表了我们从什么基础上扩展

构建Java程序镜像
首先:上传jdk.tar文件,load该tar文件

其次上传自己的jar包以及dockerfile镜像描述文件,并进入目录输入构建镜像命令

⑤网络

springboot需要与mysql,redis等进行连接,虽然容器是独立的,但有一个相同的网关

容器间可以通过网桥进行连接,但是容器自己的ip会发生变化,如果容器关闭启动

由于创建的自定义网桥可以通过容器名互相访问



上述连接网络是容器创建后连接,可以创建时连接:-network

4.项目部署

DockerCompose

格式有点不一致

上传文件后就可以:

运行命令就可以一键部署

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Win10弹出这个:https://logincdn.msauth.ne

问题描述&#xff1a; Win10脚本错误 Windows10家庭版操作系统开机后弹出这个 https://logincdn.msauth.net/shared/1.0/content/js/ConvergedLogin_PCore_vi321_9jVworKN8EONYo0A2.js 解决方法&#xff1a; 重启计算机后手动关闭第三方安全优化软件&#xff0c;然后在任务管理…

强化学习——马尔可夫过程的理解

目录 一、马尔可夫过程1.随机过程2.马尔可夫性质3.马尔可夫过程4.马尔可夫过程示例 参考文献 一、马尔可夫过程 1.随机过程 随机过程是概率论的“动态”版本。普通概率论研究的是固定不变的随机现象&#xff0c;而随机过程则专注于那些随时间不断变化的情况&#xff0c;比如天…

OpenHamrony 实战开发——LiteOS-M内核的中断管理

在程序运行过程中&#xff0c;当出现需要由CPU立即处理的事务时&#xff0c;CPU暂时中止当前程序的执行转而处理这个事务&#xff0c;这个过程叫做中断。当硬件产生中断时&#xff0c;通过中断号查找到其对应的中断处理程序&#xff0c;执行中断处理程序完成中断处理。 通过中…

Ubuntu安装VScode

Ubuntu安装VScode 前言&#xff1a; 1、Ubuntu安装VScode比较方便 2、我更喜欢source insight 1、获取到linux版本的VScode安装包 VSCode 下载地址是&#xff1a;https://code.visualstudio.com/ 2、得到安装包 3、复制到ubuntu中&#xff0c;使用命令安装 sudo dpkg -i cod…

jmeter分布式集群压测

目的&#xff1a;通过多台机器同时运行 性能压测 脚本&#xff0c;模拟更好的并发压力 简单点&#xff1a;就是一个人&#xff08;控制机controler/调度机 master&#xff09;做一个项目的时候&#xff0c;压力有点大&#xff0c;会导致结果不理想&#xff0c;这时候找几个人&a…

国际护士节庆祝活动向媒体投稿有方法很轻松

作为一名医院职工,我肩负着医院对外信息宣传的重任。在国际护士节这个特殊的日子里,我们医院举办了一系列庆祝活动,以表彰护士们的辛勤付出和无私奉献。然而,在将这些活动信息投稿至媒体的过程中,我最初却遭遇了诸多挑战。 起初,我采用传统的邮箱投稿方式,将精心撰写的稿件发送…

Docker运行出现iptables: No chain/target/match by that name报错如何解决?

在尝试重启 Docker 容器时遇到的错误信息表明有关 iptables 的配置出了问题。这通常是因为 Docker 需要配置网络&#xff0c;而 iptables 规则没有正确设置或被意外删除。具体到你的错误信息中&#xff0c;报错 iptables: No chain/target/match by that name 表示 Docker 尝试…

Java后端的接口参数两个interger 类型情况解决

get请求 &#xff0c;对应请求头 RequestParm, post请求&#xff0c; 对应请求体 &#xff0c;RequestBody 两个Integer参数情况 GetMapping("/insertStaffClass")public R<Void> insertStaffClass(RequestParam Integer staffId,RequestParam List<Integ…

Floyd+二分,蓝桥杯国赛2022[环境治理]

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 0环境治理 - 蓝桥云课 (lanqiao.cn) 二、解题报告 1、思路分析 考虑我们治理时间越长&#xff0c;灰尘度和越低&#xff0c;具有单调性 考虑 二分治理天数mid&#xff0c;1~n可以降低与其相连边 mid / n 点…

PyQt5中的QGraphicsView()

文章目录 1. 简介2. 一个简单的示例2. 加载一幅图片3. 常用方法示例 1. 简介 QGraphicsView是PyQt5中用于显示图形场景的小部件&#xff0c;它提供了许多常用的方法来控制视图的行为和属性。下面是一些常用的QGraphicsView方法&#xff1a; setScene(scene): 设置要显示的场景…

初识C语言——第十九天

for循环 1.简单概述 2.执行流程 3.建议事项&#xff1a;

vue从入门到精通(一):初始Vue

一&#xff0c;Vue是什么 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代…

长难句打卡 5.13

And in Europe, some are up in arms over a proposal to drop a specific funding category for social-science research and to integrate it within cross-cutting topics of sustainable development. 在欧洲&#xff0c;有些人正竭力反对一项“终止专用于社会科学研究的…

java spring boot动态数据库获得配置信息连接多数据源(数据库)

数据库 数据库文件和代码文件 https://download.csdn.net/download/qq_34631220/89304173 链接&#xff1a;https://pan.baidu.com/s/1xoh6xiSRx4nW_gKvR1QPjg 提取码&#xff1a;i7b7 –来自百度网盘超级会员V5的分享 文章位置 添加链接描述 说明&#xff1a;事务只能单库…

JUC下的Future 详解

java.util.concurrent.Future 是Java并发编程中一个重要的接口&#xff0c;它代表一个异步计算的结果。当你提交一个任务到执行器&#xff08;如ExecutorService的submit方法&#xff09;&#xff0c;它会返回一个Future对象。这个对象允许你查询任务是否完成、取消任务、获取任…

软件需求工程习题

1.&#xff08;面谈&#xff09;是需求获取活动中发生的需求工程师和用户间面对面的会见。 2.使用原型法进行需求获取&#xff0c;&#xff08;演化式&#xff09;原型必须具有健壮性&#xff0c;代码质量要从一开始就能达到最终系统的要求 3.利用面谈进行需求获取时&#xf…

vue3使用依赖注入实现跨组件传值

父组件Index.vue: <script setup> import { onMounted, provide, ref } from vue import Child from ./Child.vue import ./index.cssconst count ref(0)provide(count, count)const handleClick () > {count.value }onMounted(() > {}) </script><tem…

基于SpringBoot + MySQL的宠物医院管理系统设计与实现+毕业论文+指导搭建视频

系统介绍 项目的使用者可以避免排队挂号&#xff0c;比较方便&#xff0c;也方便于宠物医院的管理。现在的宠物本系统根据华阳社区宠物医院管理工作流程将系统使用者划分为三类&#xff0c;分别为、宠物医生、宠物主人以及系统管理人员&#xff0c;以下是对该三类类用户的具体…

基于百川大语言模型的RSS新闻过滤应用【云服务器+公网网页,随时随地看自己DIY订阅的新闻内容】

背景 目前从公众号、新闻媒体上获得的新闻信息,都是经过算法过滤推荐的,很多时候会感到内容的重复性和低质量,因为他们也要考虑到自己的利益,并非完全考虑用户想要的、对用户有价值的信息。这时,如果要获取自己认为重要的信息,定制化开发自己的筛选算法更好。 效果 素材…

自托管站点监控工具 Uptime Kuma 搭建与使用

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 Uptime Kuma 是一个类似 Uptime Robot 的站点监控工具&#xff0c;它可以自托管在自己的 Nas 或者 VPS 上&#xff0c;用来监控各类站点、数据库等 监控类型&#xff1a;支持监控 HTTP(s) / TCP / HTTP(s…