5-17学习笔记
MyBatisPLus
什么是MybatisPlus?
Mybatis基础上 只做增强不做改变 的工具
MybatisPlus有什么用?
封装好了增删改查方法,更加高效地使用Mybatis进行数据库操作。 无需写SQL语句了
使用MybatisPlus 条件构造,替代了复杂SQL语句如条件/更新查询
MybatisPlus怎么使用?
使用步骤:
1、导入依赖
<!-- mybatis-plus 的起步依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </dependency>
2、定义一个Mapper接口 extends BaseMapper<XXX>
3、定义Service接口 extends IService<XXX>
4、定义Service实现类 extends ServiceImpl<XXXMapper,XXX>
5、除了增删改查,还有分页:
1)导入MybatisPlus封装好的配置类(官网复制)
2)写到Service中
构建一个Page对象
如果需要条件 封装条件构造条件
执行Service中的page方法
今天要掌握的重要点:
用MybatisPlus实现基本的增删改查、分页插件逻辑的处理方式
能够掌握MybatisPlus条件构建器来查询或更新的操作 条件构造必须能看懂!!!(项目中经常用)☆☆☆
注意小扩展业务功能:数据库隐式删除密码 (deleted字段和@TableS注解)
使用MybatisPlus本质上 1、能直接使用Service的增删改查方法 2、并且可以使用条件构造替代条件查询/修改等 就ok了
里面最重要的条件构造单ling出来细说
主要看这一条总结就行,其他几段代码都是理解的小点1)为什么使用MybatisPlus
参数加判断是否为空设置值和条件构造 最后结合成完整的条件构造
以后就用LambdaQUWrapper 注意写法
5-18学习笔记
git相关
什么是git?
git是代码的版本管理工具
git有什么作用?
git管理代码,能够回溯、版本切换、多人协作、远程备份
git怎么用?
1、黑窗口,git命令操作 管理代码
2、IDEA,直接用git管理代码
所以今天的学习目标是:
- 能够掌握版本控制Git核心作用是什么
- 能够掌握Git基本概念,如本地仓库、远程仓库、分支
- 能够掌握Git常用命令,如本地仓库命令,远程仓库命令,分支、合并命令
- 在IDE中集成并使用Git来完成项目代码的版本控制
黑窗口
主要命令有三块:1.本地仓库 2.远程仓库 3.分支
1.本地仓库
创建仓库 git init
(看到.git文件即创建成功)
加入暂存区 git add 文件名 / git add .
暂存区提交到版本库 git commit 文件名 -m'提交时备注信息'
切换历史版本 git reset --hard 版本号
(git log 查看版本历史)
2.远程仓库 (.gitignore 忽略版本文件)
从远程仓库克隆(第一次使用项目) git clone url
(克隆到本地,仓库直接存在,在里面直接操作)
添加关联的远程仓库 git remote add origin url
(上传远程仓库先关联,git remote -v查看关联的远程仓库)
远程仓库推送代码 git push master(分支名称)
(第一次需要身份认证,除了本身就是被授权的开发者)
从远程仓库拉去 git pull origin master(分支名称)
另外
注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories )
解决此问题可以在git pull命令后加入参数--allow-unrelated-histories
3.分支
从远程仓库拉取 git pull <shortname如origin默认> <branch如master默认>
创建分支命令格式:git branch 分支名称
切换分支命令格式:git checkout 分支名称
推送至远程仓库分支: git push 远程仓库简称 分支命令
冲突产生的情况
多人同时修改同一文件: 多人开发一个项目,都对同一个文件的相同部分进行修改,尝试提交时除了第一个人其他人都会无法提交
合并分支时 俩人各自的分支合并到主分支时有在同一文件修改 就会冲突
重命名或移动文件 一个分支中重命名或移动文件,另一个分支中对原始文件也修改了,那么在合并这些分支时可能会产生冲突。
删除文件 如果一个分支删除了某个文件,而另一个分支对该文件进行了修改
冲突解决: idea 使用git手动合并代码并修改即可
解决冲突时,需仔细分析原因和上下文,确保选择正确方案。为减少冲突,建议保持良好沟通和协作,避免同时修改同一文件部分,频繁提交代码和定期合并分支也有助于及时发现和解决冲突。
IDEA简单操作Git
配置
第一次远程仓库操作
clone 远程仓库克隆下来
commit提交到本地仓库区(可备注),再push到远程仓库
注意 .gitigonre 忽略文件
本地仓库操作
create 创建本地仓库
add 将文件加入暂存区
commit 将暂存区的文件提交到版本库
showhistory 查看整个项目提交日志
远程仓库操作(已克隆的基础上)
manage remotes 查看远程仓库和添加远程仓库
推送到远程仓库
从远程仓库拉取代码(更新代码)
两种方式更新
Merge(合并)将传入的更改合并到当前分支中
Rebase(变基)将当前分支变基(重新设定基点)到传入更改之上
分支操作
分支操作:
- 查看分支,本质就是执行 git branch 命令
- 创建分支,本质就是执行 git branch 分支名 命令
- 切换分支,本质就是执行 git checkout 命令
- 将分支推送到远程仓库,本质就是执行 git push 命令
- 合并分支,本质就是执行 git merge 命令
查看分支
创建分支
切换分支、将分支推送到远程仓库、合并分支
解决冲突
总结:
日常开发
命令使用流程
- 进入团队先找直属领导开通远程仓库Git账号
- 用IDEA输入URL克隆远程仓库的代码到本地的工作空间(首次使用,仅需一次)
- 配置Git,编写代码完毕后,点 add添加暂存区
- 点commit提交到本地仓库
- 点push推送到远程仓库
- 点pull命令拉取最新的代码,如有冲突需mrger沟通解决
- 不断重复3-6步
等等,其他看文档即可
预习5-20号内容
用若依快速搭建项目
具体的学习目标如下:
- 掌握中州养老项目核心业务流程、系统架构、技术架构
- 能够熟悉若依框架的基本信息,包括它的功能、版本、特性等
- 能够独立完成若依框架的前后端项目的环境搭建
- 能够掌握前后端代码的结构以及它们的作用
- 能够独立完成若依框架的代码生成的功能,完成单表的增删改查
- 能够使用AI工具阅读代码
中间出现了连接问题,发现服务器没开,然后找了半天密码在最后一行,重新改了配置就好了成功启动
5-22号学习内容(就是两个封装概念)
VO 和 DTO:
VO 是 展示专门封装好的数据到特定页面的
DTO 是 页面传数据到后台 接收数据的
学习5-23号内容
1、在线/离线接口文档测试
领导提到swagger测试一下,一般有两种访问方式swagger和knifj 进行测试
服务地址+/swagger-ui/index.html --- > http://localhost:8080/swagger-ui/index.html
服务地址+/doc.html --- > 访问页面http://localhost:8080/doc.html
2)用于生成接口文档的注解
通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:
注解 | 说明 |
@Api | 用在类上,描述Controller的作用 |
@ApiOperation | 用在方法上,说明方法的用途、作用 |
@ApiParam | 用在方法的参数上,描述单个形参的含义 |
@ApiImplicitParam | 用在方法上,描述单个形参的含义,与上面相比使用范围更广 |
@ApiModel | 用在类上,用对象来接收参数或者返回参数,描述类的含义 |
@ApiModelProperty | 用在类的属性上,用对象来接收参数或者返回参数,描述字段的含义 |
3)下载测试文档
2、修改代码生成功能:
改vm
vm的语法
vm的生成使用
3、禅道的使用
禅道,上班用来管理项目的平台
主要在上面领任务,处理bug完成工作
5-24正式开始项目一 :中州养老
查询所有启用的护理等级功能完善
在已有等级列表查询功能的基础上 新增一个只查询所有启用的护理等级功能的controller方法即可完成功能
5-25自习课,发现还有不熟悉的内容
1、MybatisPlus条件构造 ok
2、dto和vo的使用 ok
3、接口四要素(参照接口文档写业务)
5-26 Redis
上午总结
Redis是什么?
Redis是一个基于内存的一款非关系型数据库(表和表之间没有关联关系),以键值对存储数据的,存储到了内存中
主要特点:
基于内存存储,读写性能高
采用单线程机制 多路复用 效率高
适合存储热点数据(热点商品、资讯、新闻)
企业应用广泛
复习:
Docker安装Redis的命令
Docker
Docker pull redis
Docker images
Docker run-d--name=redis-p 6379:6379 redis
Docker start | stopl restart redis
Redis基本命令
@Test public void testString() throws InterruptedException { //放数据 set name lisi redisTemplate.boundValueOps("name").set("lisi"); //取数据 get name Object name = redisTemplate.boundValueOps("name").get(); System.out.println(name); //放数据带超时时间setex setex age 10 20 redisTemplate.boundValueOps("age").set(20, 10, TimeUnit.SECONDS); Object age = redisTemplate.boundValueOps("age").get(); System.out.println(age); Thread.sleep(10000); //睡眠11秒 验证下一次能否获取到值 age = redisTemplate.boundValueOps("age").get(); System.out.println(age); //如果存在key,则不设置,返回faLse,如果不存在,则设置,返回truesetnx redisTemplate.boundValueOps("city2").setIfAbsent("beijing"); redisTemplate.boundValueOps("city2").setIfAbsent("beijing"); }
5-29
分清楚侧重点;
涉及面试题
1、代码质量怎么管理?
1)idea上 有两款常用代码检查插件
2)有时候开发团队会找git提交历史 审查代码
2、你们的开发流程
1)需求评审会-----设计表 设计接口-----开发-----测试-----上线
2)有时候开发团队会找git提交历史 审查代码
3、项目怎么部署
1)简单:在idea中把项目打成jar包,扔到服务器上 java -jar
2)复杂: 用Jenkins
4、线上出了bug怎么解决?日志怎么看?
1)解决方式看服务器上项目的日志
2)ELK
2、Jenkins流水线配置
Jenkins是什么:
是一个开源的实现持续集成的软件工具。官方网站:https://www.jenkins.io/zh/
作用:
Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
使用步骤:
1、服务器部署Jenkins
-----------------------------------------有几天没记录,一周后接着更新了
-----------------------------------------智能检测技术(重要)--------------------------------------------
智能设备的数据传输和上报
6.1所应用
处理设备联网之后上报数据到IOT平台
华为云IoTDA官方文档 https://support.huaweicloud.com/iothub/index.html
今日的目标:
- 能够熟悉华为云IoTDA平台的特点
- 能够掌握华为云IoTDA平台的一些概念,如:产品、设备、物模型等
- 能够掌握使用华为云IoTDA平台提供的接口创建设备,并绑定业务数据(老人、位置)
- 能够熟悉智能设备对接华为云IoTDA平台上报数据的方式
实现:
6.2所应用
昨天学了设备的数据上传管理
目标:今天,通过AMQP实现接收数据并保存到数据库 方便业务应用的展示
使用IOT平台要清楚几个概念
生产者 (用户使用的设备) 代理(IOT平台) 消费者(中州养老项目)
为什么用配置AMQP服务端?
需要用AMQP接收数据
该业务实现步骤
1、IOT平台创建数据转发规则
2、yml中Amqp相关配置
2、AmqpClient改造
AmqpClient实现ApplicationRunner接口
加载当前AmqpClient对象的时候,就会执行run方法(实际调用了start启动方法)
start方法里面创建了链接,每个链接里面需要一个消费者,每个消费者里面又设置了一个监听
监听里面使用了线程池,线程池使用了Spring的ThreadPoolTaskExecutor方法 (线程池的使用方式和场景)
线程池使用场景: 多个设备数据给传过来只有一个线程量大效率低,就用线程池处理
线程池使用方式: ThreadPoolTaskExecutor
6.3预习
1、目标
只做了一个楼层的接口
后面需要做房间设备的激活
以及另一个房间的接口
6.4学习
数据清理 小业务功能
要求:再来一个设备数据的历史表,保留两周之前的数据 (分表设计 deviceData deviceDataHisroty)
思路: 定时任务,每天从device_data表中查询上报时间大于15的数据,移动到历史表中,删除大于15天的数据
用到俩技能点
1、分表设计思想:不删除每次保存的设备数据,表就存越来越大导致查询效率低,这就用到了分表设计方案放到历史表里
2、定时任务
实现
智能床位模块:数据显示业务
在智能床位这个模块中共分为了两个接口 (接口四要素)
获取所有的包含智能设备的楼层
查询房间设备或床位设备的数据
实现:
1、先分析需求设计SQL
-展示哪个楼层中的房间或床位绑定了设备,需要展示的楼层编号 -房间 和 床位 SELECT DISTINCT f.* FROM floor f LEFT JOIN room r ON r.floor_id=f.id LEFT JOIN bed b ON b.room_id=r.id LEFT JOIN device d ON d.binding_location=r.id AND d.physical_location_type=1 LEFT JOIN device dd ON dd.binding_location=b.id AND dd.physical_location_type=2 WHERE d.id IS NOT NULL OR dd.id IS NOT null
2、设计接口(严格按照接口文档四要素来写)
重点对照返回的json格式
面试题
Mysql索引
增加查询效率
1、索引的常见类型
分类:主键索引
唯一索引
普通索引
复合(联合)索引
2、索引失效?
LIKE查询时前面加%导致索引失效
数据类型没有匹配
列参与了运算
IS NOT nu11
3、创建原则?
最左匹配原则 A B C AC AB BC CBA
4、如何知道索引是否失效?
关键字 explain判断type列的值是不是all
5、索引的数据结构是什么?
B+tree
非叶子节点不存数据数据都在叶子节点上
接收设备数据遇到的bug:
项目新建设备后生成的密钥,无法激活设备
dubug几次/clean 就解决了
推荐阅读:
文章有(0)条网友点评