站长信息
jeffery.xu
jeffery.xu

软件工程师

欢迎访问我的个人笔记网站!我是一名热爱技术的开发者,专注于Web开发和技术分享。

811495111@qq.com
18521510875
筛选

个人笔记

初始化数据写入
java学习
package com.mobizone.kb.config;

import com.mobizone.kb.entity.Users;
import com.mobizone.kb.service.IUsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class DataInitializerConfig implements CommandLineRunner {

    @Autowired
    private IUsersService usersService;
    @Override
    public void run(String... args) throws Exception {
        // 检查是否存在admin用户
        if (usersService.userExists("admin") == false) {
            Users admin = new Users();
            admin.setUsername("admin");
            // 加密密码
            admin.setPassword("123456");
            usersService.addUser(admin);
            System.out.println("管理员账号创建成功");
        }
    }
}

CommandLineRunner是Spring Boot提供的一个接口,用于在应用程序完全启动后执行特定的代码逻辑。


CommandLineRunner的作用
1. 启动后执行


在Spring Boot应用完全启动后自动执行
所有Bean都已初始化完成
可以安全地访问数据库和其他服务
2. 初始化数据
常用于项目启动时的数据初始化
创建默认用户、角色等基础数据
数据库预填充

执行时机
启动顺序:
Spring容器启动
所有Bean创建和初始化
应用上下文完全准备就绪
CommandLineRunner.run()方法执行 ← 这里
应用可以接收请求

Mybatis 查询替换字段
java学习
<resultMap id="userMap" type="com.mobizone.kb.entity.Users">
<result property="passwordHash" column="password"/>
<!-- 其他字段映射 -->
</resultMap>
<select id="selectByUserName" parameterType="string" resultMap="userMap">
select * from users where username=#{username}
</select>
Mybatis Exists判断
java学习
<select id="existsByUserName" parameterType="string" resultType="boolean">
select count(1) > 0 from users where username = #{username}
</select>
IDEA禁用拼写检查
java学习

打开设置 (Ctrl+Alt+S)
导航到 Editor -> Inspections
找到 Spelling 检查项
取消勾选即可禁用拼写检查

json和实体类关联
java学习
@JsonProperty("status")
在实体类字段加上该注解
@Bean注解详解
编程技巧

@Bean注解是Spring框架中的核心注解,用于将方法返回的对象注册为Spring容器管理的Bean。


@Bean的核心作用
1. Bean注册


将方法返回的对象注册到Spring的IoC容器中
成为Spring管理的组件,可以被依赖注入
2. 生命周期管理


Spring负责Bean的创建、初始化和销毁
默认为单例模式(Singleton)
3. 依赖注入
可以在任何Spring管理的类中通过@Autowired注入使用

@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}

执行过程:
Spring启动时扫描到这个方法
调用方法创建BCryptPasswordEncoder实例
将实例注册到容器中,Bean名称为passwordEncoder
全应用共享这一个实例

常见的Bean作用域
singleton(默认):全局单例
prototype:每次注入创建新实例
request:每个HTTP请求一个实例
session:每个HTTP会话一个实例

@Bean本质上是告诉Spring:"这个方法返回的对象请帮我管理,其他地方需要时直接注入给它们"。
Mysql强行清空有外键的表
编程技巧
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE users;
初步pom配置
编程技巧
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.mobizone</groupId>
    <artifactId>kb</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>kb</name>
    <description>kb</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>24</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
    <dependencies>
    <!--    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>-->
<!--        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>com.mysql</groupId>-->
<!--            <artifactId>mysql-connector-j</artifactId>-->
<!--            <scope>runtime</scope>-->
<!--        </dependency>-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>
        <!-- JWT -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.11.5</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.11.5</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId>
            <version>0.11.5</version>
            <scope>runtime</scope>
        </dependency>
        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.38</version>
            <optional>true</optional>
        </dependency>
        <!-- Swagger (springdoc-openapi) -->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

总结几个问题
1. springboot 3.5.4  Lombok要版本高
2. mybatis 版本要新
3. 其他的暂时没碰到问题

明末第二章
游戏攻略
第二章-云顶城

望山村:谜题门正确答案:逆行因果→桥头对话望山村女眷→神龛旁见到老婆婆,给她蒸面兔→村里打怪物获得【贵重物品】珊湖手串→一间房子里的人说有个大侠被打了东西被抢了→在药商之墓使用“调查”姿势,获得【贵重物品】蜀绣丝帕→珊湖手串给望山村女眷,刷新后死亡→落雪小道

落雪小道:对话年大侠→对话李定国、孙可望→落雪小道神龛前,打弓箭手得到大西军令,附近捡到【贵重物品】破烂的包袱→破烂的包袱给年大侠,可以选择揭穿逗逗他→落雪小道神龛旁对话吴刚

云顶外城:(女道士清醒线)房子里遇到女道士,对话得到【贵重物品】真武观秘卷→神龛附近村里房子二楼对话老婆婆→神龛附近烽火台上对话白袍老者→点燃三个烽火台,放下吊桥

寄死窟:矿道入口附近桥头发现寄死窟→和墙里的老人对话,得到【贵重物品】长寿碗→外城矿道→大西军营地

大西军营地:神龛旁帐篷打艾能奇的亲信,得到大西军营地钥匙→对话年大侠→打艾能奇→对话年大侠→白玉丸子给老婆婆

映雪门:过桥到映雪门打刘公公→进屋对话何有哉→出门对话雪堡账房李万三,(女道士清醒线)给李万三真武观秘卷,得到赤汞晶石给女道士→云顶内城

云顶内城:来到云顶内城,有只怪物堵在方瑶门口,干掉怪物和方瑶对话,她就是药商之女,给她蜀绣丝帕→客栈街道旁对话雪堡管家沈彦平,答应帮他找凤冠霞帔→客栈里见到俩小孩,对话沈静安帮她找胖子,长寿碗给麻杆→在云顶集市帐篷找到胖子,劝他回去找老大→找回胖子后,对话沈静安得到凤冠霞帔→给雪堡管家沈彦平看凤冠霞帔→雪堡主堡

雪堡主堡:(女道士清醒线)如果你没有打艾能奇就来了雪堡,李账房会在这里拦截你,他恨你断了他的财路→上楼对话素衣侠女、雪堡夫人→凤冠霞帔给雪堡夫人,隐瞒管家消息→电梯下方有隐藏缺口,到地下宝库见到熊猫

竖井:打雪堡夫人→回普元寺对话玄阳子→竖井入口神龛旁对话方瑶,答应帮忙→竖井里拿到【贵重物品】怪医研究手记→新娘闺阁神龛桥头对话何有哉,给他看怪医研究手记、实验手记·残页一→回普元寺对话玄阳子

新娘闺阁:沿着撒花瓣的路走,对话牢房里的红岚→打戴斗笠的红衣高级侍女,得到地牢钥匙给红岚→桥头对话说书人→过桥时掉下,在喜宴厅堂打完美新娘方灵→在神龛入梦刷新后,对话方瑶、说书人,说书人会把你传送到第三章入口→回普元寺对话瑜夏、玄阳子→去看望普元寺外的垂髫小童,没有对话,只听到痛苦的呻吟

如何使用 WSL(Windows Subsystem for Linux)
编程技巧

先决条件

必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。 如果使用的是早期版本,请参阅 手动安装页

安装 WSL 命令

现在,可以使用单个命令安装运行 WSL 所需的所有内容。 右键单击并选择“以管理员身份运行”,在 管理员 模式下打开 PowerShell 或 Windows 命令提示符,输入 wsl --install 命令,然后重新启动计算机。

PowerShell
wsl --install

此命令将启用运行 WSL 并安装 Linux 的 Ubuntu 分发所需的功能。 (可以更改此默认分布)。

如果运行的是较旧的版本,或者只是不想使用安装命令,并且想要分步说明,请参阅 适用于旧版本的 WSL 手动安装步骤

首次启动新安装的 Linux 分发版时,控制台窗口将打开,系统会要求你等待文件取消压缩并存储在计算机上。 所有未来的发射应该需要不到一秒钟的时间。