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

中州养老项目 学习2)构造条件需要注意的几个点

凑得字段 需要加@TableFiled注解忽视中州养老项目 学习

参数加判断是否为空中州养老项目 学习设置值和条件构造   最后结合成完整的条件构造中州养老项目 学习以后就用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 命令


查看分支

中州养老项目 学习

创建分支

中州养老项目 学习

中州养老项目 学习

切换分支、将分支推送到远程仓库、合并分支

中州养老项目 学习


解决冲突

中州养老项目 学习

点击Merge按钮中州养老项目 学习


       总结:

日常开发

中州养老项目 学习

命令使用流程

  1. 进入团队先找直属领导开通远程仓库Git账号
  2. 用IDEA输入URL克隆远程仓库的代码到本地的工作空间(首次使用,仅需一次)
  3. 配置Git,编写代码完毕后,点 add添加暂存区
  4. 点commit提交到本地仓库
  5. 点push推送到远程仓库
  6. 点pull命令拉取最新的代码,如有冲突需mrger沟通解决
  7. 不断重复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 就解决了

中州养老项目 学习