插件(项目)

Git

Git的主要功能是跟踪文件的更改和协助多人合作开发。它允许开发者创建项目的不同版本,并能够在不同版本之间轻松切换。

常用命令

本地仓库

设置用户信息
git config --global user.name "lovertx"
git config --global user.email "cpractice@163.com"

查看配置信息
git config --list

查看文件状态
git status

将文件的修改加入到暂存区
git add

将暂存区的文件取消暂存或者是切换到指定版本
git reset

将暂存区的文件修改提交到版本库
git commit

查看日志
git log

远程仓库

git remote 查看远程仓库
git remote add 添加远程仓库
git clone 从远程仓库克隆
git pull 从远程仓库拉取
git push 推送到远程仓库

分支操作

git branch 查看分支
git branch -r 列出所有远程分支
git branch -a 列出所有本地分支和远程分支

git branch[name] 创建分支
git branch b1 

git checkout[name] 切换分支
git checkout b1
git checkout master

git push [shortName][name] 推送至远程仓库分支
git push origin b1
git push origin master

git merge[name] 合并分支
git merge b1

分支合并分支冲突解决

1.手动修改需要合并的分支 
2.git add 分支
3.git commit 分支

创建标签

标签相当于是以一种简洁易懂的方式来保存历史版本

git tag 查看标签
git tag v0.1 设置标签
git push originv0.1 推送标签

git checkout -b b2 v0.3 
检查出标签时需要新建一个分支来指向某个标签

获取Git仓库

在本地初始化Git仓库

1、在任意目录下创建一个空目录作为我们的本地Git仓库

2、进入这个目录中,右键打开Git bash

3、执行命令git init

从远程仓库克隆

可以通过Git提供的命令从远程仓库进行克隆,将远程仓库克隆到本地

1、打开Git bash

2、执行命令git clone "远程Git仓库地址"(不加"")

工作区,暂存区,版本库

版本库:.git隐藏文件夹就是版本库,版本库中存储了很多配置信息,日志信息和文件版本信息。

工作区:包含.git文件夹的目录就是工作区,也称工作目录,主要用于存放开发的代码

暂存区:.git文件夹中的index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方

工作区中文件的状态

untracked未跟踪(未被纳入版本控制)

tracked已跟踪(被纳入版本控制)

1、Unmodified(未修改状态)

2、Modified(已修改状态)

3、Stage(已暂存状态)

IDEA中使用Git

获取仓库

1、本地初始化仓库

2、从远程仓库克隆

本地仓库操作

1、添加或修改文件时需要将其加入暂存区

远程仓库操作

1、查看远程仓库

2、添加远程仓库

3、推送至远程仓库

4、从远程仓库拉取

分支操作

1、查看分支

2、创建分支

3、切换分支

4、将分支推送到远程仓库

5、合并分支

JWT令牌

使用流程(原理)

1、登录成功后,服务端生成令牌并返回令牌给前端

2、后续每个请求都要携带JWT令牌,服务端的系统在每次请求处理之前,先校验令牌,通过后,再处理

启动:

登录成功后生成令牌

1、引入依赖:在pop.xml中引入jwt依赖

2、调用依赖的工具包中的api

生成令牌:

class testJWT{
    @Test
    public void JWT(){
    Map<String,Object> claims = new HashMap<>();//数据类型存储
    claims.put("id",1);
    claims.put("name","tom");//测试数据
    String jwt = Jwts.builder()//令牌实际是字符串,调用方法生成
            .signWith(SignatureAlogorithm.HS256,"itheima")//设定签名算法,指定密钥
            .setClaims(claims)//指定对象接受令牌信息
            .setExpiration(new Date(System.currentTimeMillis() + 3600*1000))//设置有效期1h
            .compact();//将三部分拼接成一个字符串(jwt由头部、载荷、签名组成)
    System.out.println(jwt);
    }
}

解析令牌:

以上代码写入utils包中当作工具类。

使用:

在controller包下的LoginController类中

java 复制代码
public class LoginController {  
  
    /**  
     * 注入EmpService对象,用于处理员工相关的业务逻辑。  
     */  
    @Autowired  
    private EmpService empService;  
  
    /**  
     * 处理POST请求的/login接口,用于用户登录。  
     *  
     * @param emp 请求体中的员工信息,包括登录所需的凭证。  
     * @return 登录成功则返回包含JWT的Result对象,登录失败则返回错误信息Result对象。  
     */  
    @PostMapping("/login")  
    public Result login(@RequestBody Emp emp) {  
        // 调用EmpService的login方法,根据传入的员工信息进行登录验证。  
        Emp e = empService.login(emp);  
        // 如果登录成功,即返回的员工对象不为空。  
        if (e != null) {  
            // 创建一个HashMap用于存储JWT的载荷信息。  
            Map<String, Object> claims = new HashMap<>();  
            // 设置载荷中的id字段。 
            claims.put("id", e.getId());  
            // 设置载荷中的用户名字段。  
            claims.put("username", e.getUsername());  
            // 调用JwtUtils的generateJwt方法,根据载荷信息生成JWT字符串。  
            String jwt = JwtUtils.generateJwt(claims);  
            // 返回包含JWT的Result对象,表示登录成功。  
            return Result.success(jwt);  
        }  
        // 如果登录失败,返回错误信息Result对象。  
        return Result.error("用户名或密码错误");  
    }  
}
java 复制代码
//empService.login(emp);的方法实现
public Emp login(Emp emp){
    Emp e = empMapper.getByUsernameAndPassword(emp);
    return e;
}
java 复制代码
//EmpMapper中
@Select("select * from emp where username = #{username} and password = #{password}")
Emp getByUsernameAndPassword(Emp emp);

Filter过滤器

3、启动

Lombok

Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或eques方法,同时可以自动化日志变量

(Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。)

启动:

1、添加依赖

java 复制代码
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.4</version>
	<scope>provided</scope>
</dependency>

2、安装插件

用法:

1、自动化日志变量

java 复制代码
@Slf4j
@RestController
@RequestMapping(("/user"))
public class UserController {

    @GetMapping("/getUserById/{id}")
    public User getUserById(@PathVariable Integer id) {
        User user = new User();
        user.setUsername("风清扬");
        user.setAge(21);
        user.setId(id);

        if (log.isInfoEnabled()) {
            log.info("用户 {}", user);
        }

        return user;
    }

}

通过反编译可以看到@Slf4j注解生成了log日志变量(严格意义来说是常量),无需去声明一个log就可以在类中使用log记录日志。

2、编译源文件,然后反编译class文件,反编译结果如下图。说明@Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。

java 复制代码
@Data
public class User implements Serializable {

    private static final long serialVersionUID = -8054600833969507380L;

    private Integer id;

    private String username;

    private Integer age;

}

常用注解:

@Setter 注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。

@Getter 使用方法同上,区别在于生成的是getter方法。

@ToString 注解在类,添加toString方法。

@EqualsAndHashCode 注解在类,生成hashCode和equals方法。

@NoArgsConstructor 注解在类,生成无参的构造方法。

@RequiredArgsConstructor 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。

@AllArgsConstructor 注解在类,生成包含类中所有字段的构造方法。

@Data 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。

@Slf4j 注解在类,生成log变量,严格意义来说是常量。private static final Logger log = LoggerFactory.getLogger(UserController.class);

相关推荐
Q_192849990626 分钟前
基于Spring Boot的工商局商家管理系统
java·spring boot·后端
m0_7482326437 分钟前
[MySQL报错]关于发生net start mysql 服务无法启动,服务没有报告任何错误的五种解决方案。
java
Godlovesea41 分钟前
ubuntu控制器多网口配置
开发语言·php
小学鸡!44 分钟前
idea报错:There is not enough memory to perform the requested operation.
java·intellij-idea
web136885658711 小时前
rust教程 第一章 —— 初识rust
开发语言·后端·rust
songroom1 小时前
Rust : tokio中select!
开发语言·后端·rust
dubochao_xinxi1 小时前
QT5 在某些系统出现qt.qpa.xcb: could not connect
开发语言·qt
blueman88881 小时前
QWidget应用封装为qt插件,供其他qt应用调用
开发语言·qt
qincjun1 小时前
Qt仿音乐播放器:设置窗口、部件属性
开发语言·qt
编码小哥1 小时前
C++线程同步和互斥
开发语言·c++