插件(项目)

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);

相关推荐
吾日三省吾码40 分钟前
JVM 性能调优
java
stm 学习ing1 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc2 小时前
《Python基础》之字符串格式化输出
开发语言·python
弗拉唐2 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi772 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
mqiqe2 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin2 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
少说多做3433 小时前
Android 不同情况下使用 runOnUiThread
android·java