配置文件生成器-秒杀SSM的xml整合

news2025/1/10 16:52:03

配置文件生成器-秒杀SSM的xml整合

在这里插入图片描述

思路: 通过简单的配置,直接生成对应配置文件。

maven坐标

  <dependencies>
    <!--    配置文件生成    -->
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.31</version>
    </dependency>
    <!--数据库驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.27</version>
    </dependency>

    <!--数据库连接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.1</version>
    </dependency>
    <!--    jspapi-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>
    <!--      jstl标签库  -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!--Mybatis-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.2</version>
    </dependency>
    <!--mybatis、spring整合-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.6</version>
    </dependency>

    <!--Springmvc-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.12.RELEASE</version>
    </dependency>

    <!--    mvc、实体类序列化成json。默认jackson    -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.12.5</version>
    </dependency>
    <!--    lombok插件    -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.30</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>
  </dependencies>
  <build>
    <!--  必选:生成ssm配置文件时,务必把以下内容注释  。项目运行过程mybatis如果报错,再打开、否则保留注释即可。 -->
    <!--        <resources>-->
    <!--            &lt;!&ndash;  静态资源过滤问题解决&ndash;&gt;-->
    <!--            <resource>-->
    <!--                <directory>src/main/java</directory>-->
    <!--                <includes>-->
    <!--                    <include>**/*.properties</include>-->
    <!--                    <include>**/*.xml</include>-->
    <!--                </includes>-->
    <!--                <filtering>false</filtering>-->
    <!--            </resource>-->
    <!--            <resource>-->
    <!--                <directory>src/main/resources</directory>-->
    <!--                <includes>-->
    <!--                    <include>**/*.properties</include>-->
    <!--                    <include>**/*.xml</include>-->
    <!--                </includes>-->
    <!--                <filtering>false</filtering>-->
    <!--            </resource>-->
    <!--        </resources>-->
  </build>

一、生成器ftl模板文件

模板文件,全部放在resource目录下的template文件夹中 。

  • mybatis-config-template.ftl 模板文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
   <settings>
        <!-- 打印sql日志 -->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
    <!-- 设置别名 -->
    <typeAliases>
        <package name="${packageName}"/>
    </typeAliases>

    <!-- 其他的MyBatis配置 -->

</configuration>
  • springmvc-config-template.xml.ftl 模板文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 配置Controller包扫描 -->
    <context:component-scan base-package="${basePackage}"/>
    
    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="${viewResolverPrefix}"/>
        <property name="suffix" value="${viewResolverSuffix}"/>
    </bean>
      <!--配置静态资源的访问映射,此配置中的文件,将不被前端控制器拦截 -->
    <mvc:resources location="/static/" mapping="/static/**" />

    <!-- 开启SpringMVC的注解 -->
    <mvc:annotation-driven/>

</beans>
  • spring-mybatis-config-template.ftl 模板文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 扫描dao和service包 -->
    <context:component-scan base-package="${basePackage}"/>

    <!-- 数据源配置,根据实际数据库连接信息修改 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${dbDriverClassName}"/>
        <property name="url" value="${dbUrl}"/>
        <property name="username" value="${dbUsername}"/>
        <property name="password" value="${dbPassword}"/>
    </bean>

    <!-- MyBatis的SqlSessionFactory配置 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="${mapperLocations}"/>
        <!--注入mybatis配置文件-->
         <property name="configLocation" value="${mybatisConfigLocation}"/>
    </bean>

    <!-- MyBatis的MapperScannerConfigurer配置 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="${daoBasePackage}"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

    <!-- 事务管理器配置 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

</beans>

  • web-config-template.ftl 模板文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

    <!-- Spring的核心监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Spring的核心配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>${springMyBatisConfigPath}</param-value>
    </context-param>

    <!-- Spring MVC的DispatcherServlet -->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>${springMvcConfigPath}</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 其他的Web配置 -->
    <!-- 添加UTF-8编码的全局过滤器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

二、生成器代码

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
 * 最屌Java实习生  -chen fei
 * 2023/10/6
 */
public class SSMWebXmlGenerator {
    // SSM 全局参数
    private static final String BASE_PACKAGE = "com.itheima";
    private static final String OUTPUT_DIR = "src/main/resources/ssm";  // 配置文件生成目录

    // MyBatis 配置参数
    private static final String MYBATIS_CONFIG_LOCATIONS = "classpath:ssm/mybatis-config.xml";
    private static final String MYBATIS_OUTPUT_PATH = OUTPUT_DIR + "/mybatis-config.xml";  // 设置mybaits配置文件名字
    private static final String POJO_PACKAGE = BASE_PACKAGE + ".pojo"; // typeAliases  设置别名参数

    // Spring MVC 配置参数
    private static final String SPRING_MVC_OUTPUT_PATH = OUTPUT_DIR + "/springmvc-config.xml";  //springmvc配置文件名字
    private static final String CONTROLLER_PACKAGE = BASE_PACKAGE + ".controller";   // 配置controller包位置,以便可以扫描到里面的bean
        private static final String VIEW_RESOLVER_PREFIX = "/WEB-INF/jsp/";  //视图解析器前缀
    private static final String VIEW_RESOLVER_SUFFIX = ".jsp";//视图解析器后缀

    // Spring 配置参数
    private static final String SPRING_OUTPUT_PATH = OUTPUT_DIR + "/spring-mybatis-config.xml";  //spring配置文件名字
    private static final String DAO_PACKAGE = BASE_PACKAGE + ".dao";  // dao层的全包名
    private static final String SERVICE_PACKAGE = BASE_PACKAGE + ".service";  //service层的全包名
    private static final String DB_DRIVER_CLASS_NAME = "com.mysql.cj.jdbc.Driver"; //mysql驱动,默认8.*
    private static final String DB_URL = "jdbc:mysql://localhost:3306/cnmsb";  //url
    private static final String DB_USERNAME = "root"; //账号
    private static final String DB_PASSWORD = "root"; // 密码
    private static final String MYBATIS_MAPPER_LOCATIONS = "classpath*:mapper/*.xml"; //配置mybatis中xml的位置

    // web.xml 配置参数
    private static final String WEB_XML_OUTPUT_PATH = "src/main/webapp/WEB-INF/web.xml";   //生成路径
    private static final String SPRING_MYBATIS_CONFIG_PATH = "classpath:ssm/spring-mybatis-config.xml";  //spring配置文件名
    private static final String SPRING_MVC_CONFIG_PATH = "classpath:ssm/springmvc-config.xml"; //springmvc文件名


    public static void main(String[] args) throws IOException, TemplateException {
        try {
//            先生成所需目录
            createDirectoriesIfNotExists();
//            生成mybaits配置文件
            generateMyBatisConfig();
//            mvc配置文件
            generateSpringMVCConfig();
//            spring配置文件
            generateSpringConfig();
//            web.xml配置文件。
            generateWebXml();
        } catch (IOException | TemplateException e) {
            e.printStackTrace();
            System.err.println("生成配置文件时出错:" + e.getMessage());
            System.out.println("请注意,生成配置文件时、请删除或注释pom文件中,build标签。会影响生成!!!");
        }
    }
    private static void createDirectoriesIfNotExists() {
        // Create base package directories
        String[] subPackages = {"pojo", "dao", "service", "controller", "utils"};
        for (String subPackage : subPackages) {
            String packagePath = BASE_PACKAGE.replace('.', '/') + "/" + subPackage;
            File packageDir = new File("src/main/java/" + packagePath);
            if (!packageDir.exists()) {
                if (packageDir.mkdirs()) {
                    System.out.println("Created package directory: " + packagePath);
                } else {
                    System.err.println("Failed to create package directory: " + packagePath);
                }
            }
        }

        // Check and create VIEW_RESOLVER_PREFIX directory
        File viewResolverDir = new File("src/main/webapp" + VIEW_RESOLVER_PREFIX);
        if (!viewResolverDir.exists()) {
            if (viewResolverDir.mkdirs()) {
                System.out.println("Created VIEW_RESOLVER_PREFIX directory: " + viewResolverDir.getPath());
            } else {
                System.err.println("Failed to create VIEW_RESOLVER_PREFIX directory: " + viewResolverDir.getPath());
            }
        }

        // Check and create 'mapper' directory in resources
        File resourcesDir = new File("src/main/resources");
        File mapperDir = new File(resourcesDir, "mapper");
        if (!mapperDir.exists()) {
            if (mapperDir.mkdirs()) {
                System.out.println("Created 'mapper' directory in resources.");
            } else {
                System.err.println("Failed to create 'mapper' directory in resources.");
            }
        }

        File resourcesDir2 = new File("src/main/resources");
        File mapperDir2 = new File(resourcesDir2, "static");
        if (!mapperDir2.exists()) {
            if (mapperDir2.mkdirs()) {
                System.out.println("Created 'static' directory in resources.");
            } else {
                System.err.println("Failed to create 'static' directory in resources.");
            }
        }
    }


    private static void generateMyBatisConfig() throws IOException, TemplateException {
        // 配置 FreeMarker
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
        configuration.setClassForTemplateLoading(SSMWebXmlGenerator.class, "/");
        configuration.setDefaultEncoding("UTF-8");
        // 加载 MyBatis 配置模板文件
        Template template = configuration.getTemplate("template/mybatis-config-template.ftl");

        Map<String, String> dataModel = new HashMap<>();
        // 设置 MyBatis 包名参数
        dataModel.put("packageName", POJO_PACKAGE);

        generateFile(MYBATIS_OUTPUT_PATH, template, dataModel);
    }

    private static void generateSpringMVCConfig() throws IOException, TemplateException {
        // 配置 FreeMarker
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
        configuration.setClassForTemplateLoading(SSMWebXmlGenerator.class, "/");
        configuration.setDefaultEncoding("UTF-8");
        // 加载 Spring MVC 配置模板文件
        Template template = configuration.getTemplate("template/springmvc-config-template.xml.ftl");

        Map<String, String> dataModel = new HashMap<>();
        // 设置 Spring MVC 包名参数和视图解析器参数
        dataModel.put("basePackage", CONTROLLER_PACKAGE);
        dataModel.put("viewResolverPrefix", VIEW_RESOLVER_PREFIX);
        dataModel.put("viewResolverSuffix", VIEW_RESOLVER_SUFFIX);

        generateFile(SPRING_MVC_OUTPUT_PATH, template, dataModel);
    }

    private static void generateSpringConfig() throws IOException, TemplateException {
        // 配置 FreeMarker
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
        configuration.setClassForTemplateLoading(SSMWebXmlGenerator.class, "/");
        configuration.setDefaultEncoding("UTF-8");
        // 加载 Spring 配置模板文件
        Template template = configuration.getTemplate("template/spring-mybatis-config-template.ftl");

        Map<String, String> dataModel = new HashMap<>();
        // 设置 Spring 包名参数和数据库连接参数
        dataModel.put("basePackage", DAO_PACKAGE + "," + SERVICE_PACKAGE);
        dataModel.put("dbDriverClassName", DB_DRIVER_CLASS_NAME);
        dataModel.put("dbUrl", DB_URL);
        dataModel.put("dbUsername", DB_USERNAME);
        dataModel.put("dbPassword", DB_PASSWORD);
        dataModel.put("mapperLocations", MYBATIS_MAPPER_LOCATIONS);
        dataModel.put("mybatisConfigLocation", MYBATIS_CONFIG_LOCATIONS);
        dataModel.put("daoBasePackage", DAO_PACKAGE);

        generateFile(SPRING_OUTPUT_PATH, template, dataModel);
    }

    private static void generateWebXml() throws IOException, TemplateException {
        // 配置 FreeMarker
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
        configuration.setClassForTemplateLoading(SSMWebXmlGenerator.class, "/");
        configuration.setDefaultEncoding("UTF-8");
        // 加载 web.xml 配置模板文件
        Template template = configuration.getTemplate("template/web-config-template.ftl");

        Map<String, String> dataModel = new HashMap<>();
        // 设置 web.xml 配置参数,引用之前生成的配置文件路径
        dataModel.put("springMyBatisConfigPath", SPRING_MYBATIS_CONFIG_PATH);
        dataModel.put("springMvcConfigPath", SPRING_MVC_CONFIG_PATH);

        generateFile(WEB_XML_OUTPUT_PATH, template, dataModel);
    }

    private static Configuration createConfiguration() {
        // 创建 FreeMarker 配置
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
        configuration.setClassForTemplateLoading(SSMWebXmlGenerator.class, "/");
        configuration.setDefaultEncoding("UTF-8");
        return configuration;
    }

    private static void generateFile(String outputPath, Template template, Map<String, String> dataModel)
            throws IOException, TemplateException {
        // 检查父目录是否存在,如果不存在则创建
        File parentDir = new File(outputPath).getParentFile();
        if (!parentDir.exists()) {
            parentDir.mkdirs();
        }

        // 写入文件
        FileWriter writer = new FileWriter(new File(outputPath));
        template.process(dataModel, writer);
        writer.close();

        System.out.println("配置文件生成成功:" + outputPath);
    }
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1068181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis中的ResultMap有什么作用

MyBatis是一款广泛使用的Java持久层框架&#xff0c;它简化了数据库访问和数据映射的工作。在MyBatis中&#xff0c;ResultMap是一个强大的工具&#xff0c;用于将数据库查询结果映射到Java对象上。本文将深入探讨MyBatis中的ResultMap&#xff0c;解释它的作用以及如何使用它来…

Java-Exception

目录 异常概念ErrorException 体系图常见运行时异常NullPointerExceptionArithmeticExceptionArrayIndexOutOfBoundExceptionClassCastExceptionNumberFormatException 常见的编译异常异常处理机制自定义异常throw和throws对比 异常是Java编程中的常见问题&#xff0c;了解如何…

Java中栈实现怎么选?Stack、Deque、ArrayDeque、LinkedList(含常用Api积累)

目录 Java中的Stack类 不用Stack有以下两点原因 1、从性能上来说应该使用Deque代替Stack。 2、Stack从Vector继承是个历史遗留问题&#xff0c;JDK官方已建议优先使用Deque的实现类来代替Stack。 该用ArrayDeque还是LinkedList&#xff1f; ArrayDeque与LinkList区别&#xff1…

互联网Java工程师面试题·MySQL 篇·第一弹

目录 1、MySQL 中有哪几种锁&#xff1f; 2、MySQL 中有哪些不同的表格&#xff1f; 3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别 4、MySQL 中 InnoDB 支持的四种事务隔离级别名称&#xff0c;以及逐级之间的区别&#xff1f; 5、CHAR 和 VARCHAR 的区别&#xff1…

吃鸡技能全终极攻略!分享顶级干货,助您稳坐吃鸡王者宝座!

在绝地求生的游戏世界里&#xff0c;只有真正的高手才能立于不败之地。今天&#xff0c;我作为专业吃鸡行家&#xff0c;将为大家揭秘一些提高游戏战斗力的秘诀&#xff0c;并分享顶级游戏作战干货&#xff0c;让你成为绝地求生的大神&#xff01; 首先&#xff0c;让我们了解一…

【AntDesign】多环境配置和启动

环境分类&#xff0c;可以分为 本地环境、测试环境、生产环境等&#xff0c;通过对不同环境配置内容&#xff0c;来实现对不同环境做不同的事情。 AntDesign 项目&#xff0c;通过 config.xxx.ts 添加不同的后缀来区分配置文件&#xff0c;启动时候通过后缀启动即可。 config…

Spring Cloud Gateway2之路由详解

Spring Cloud Gateway路由 文章目录 1. 前言2. Gateway路由的基本概念3. 三种路由1. 静态路由2. 动态路由1. 利用外部存储2. API动态路由 3. 服务发现路由(自动路由)3.1. 配置方式3.2 自动路由&#xff08;服务发现&#xff09;原理核心源码GatewayDiscoveryClientAutoConfigur…

【轻松玩转MacOS】系统设置篇

引言 作为一个MacOS新用户&#xff0c;你是否对系统设置感到迷茫&#xff1f;是否想要定制出一个完全属于自己的MacBook&#xff1f;别担心&#xff0c;本文将带你一步步走进系统设置的世界&#xff0c;让你轻松定制出一个独一无二的MacBook。让我们开始吧&#xff01;今天&am…

开发做前端好还是后端好?这是个问题!

前言 随着互联网的快速发展&#xff0c;越来越多的人选择从事Web开发行业&#xff0c;而Web开发涉及到前端和后端两个方面&#xff0c;相信许多人都曾经对这两个方面进行过探究。而且编程世界就像一座大城市&#xff0c;前端开发和后端开发就像城市的两个不同街区。作为初学者&…

【C语言初阶】分支语句和循环语句

目录 一、什么是语句 二、分支语句 2.1 if 语句 2.1.1 悬空else 2.1.2 if 书写形式的对比 2.2 switch语句 2.2.1 在switch语句中的 break 2.2.2 default子句 2.2.3 练习 三、循环语句 3.1 while循环 3.1.1 while语句中的break 3.1.2 while语句中的continue 3.2 fo…

AndroidStudio添加一个虚拟设备

虚拟设备管理器 这个是AndroidStudio的启动界面 虚拟设备管理界面 点击加号&#xff0c;新增 选择手机型号 选择系统版本 虚拟设备名 完成

应用安全系列之三十九:JWT 相关安全问题以及最佳实践

JWT 简介 JWT是JSON Web Token 的简称,根据https://www.rfc-editor.org/rfc/rfc7519的定义如下: A string representing a set of claims as a JSON object that is encoded in a JWS or JWE, enabling the claims to be digitally signed or MACed and/or encrypted. 翻译…

滴滴发布十一大数据:延边出行需求上涨280% 西部省份成旅游热点

今年十一假期适逢中秋佳节&#xff0c;在亲友团聚和长假出游的多重期盼下&#xff0c;超级黄金周展现强劲内需&#xff0c;带动多样化的消费趋势&#xff0c;出行热情也随之高涨。滴滴出行数据显示&#xff0c;打车需求相比去年同期上涨80%&#xff0c;高峰时段每分钟呼叫突破1…

[论文工具] LaTeX论文SVG和EPS矢量图转换方法详解

祝大家中秋国庆双节快乐&#xff01; 回过头来&#xff0c;我们在编程过程中&#xff0c;经常会遇到各种各样的问题。然而&#xff0c;很多问题都无法解决&#xff0c;网上夹杂着各种冗余的回答&#xff0c;也缺乏系统的实战技巧归纳。为更好地从事科学研究和编程学习&#xff…

C语言中文网 - Shell脚本 - 1

Shell 既是一个连接用户和 Linux 内核的程序&#xff0c;又是一门管理 Linux 系统的脚本语言。Shell 脚本虽然没有 C、Python、Java、C# 等编程语言强大&#xff0c;但也支持了基本的编程元素。 第1章 Shell基础&#xff08;开胃菜&#xff09; 欢迎来到 Linux Shell 的世界&am…

吃鸡攻略大揭秘!提升战斗力,分享干货!

大家好&#xff01;我是你们的吃鸡玩家小编。今天我要和大家分享一些关于提高游戏战斗力和分享顶级游戏干货的干货&#xff01; 首先&#xff0c;我们要提到的是绝地求生作图工具推荐。作为一名吃鸡玩家&#xff0c;你一定想要在游戏中获得更多的优势。绝地求生作图工具是你必备…

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 八)

其他状态管理概述 除了前面章节提到的组件状态管理和应用状态管理&#xff0c;ArkTS还提供了Watch和$$来为开发者提供更多功能&#xff1a; Watch用于监听状态变量的变化。$$运算符&#xff1a;给内置组件提供TS变量的引用&#xff0c;使得TS变量和内置组件的内部状态保持同步…

WSL 安装 NVIDIA显卡驱动

文章目录 WSL 安装 NVIDIA显卡驱动本机显卡信息验证安装 WSL 版 Ubuntu 22.04在 WSL 中安装 NVIDIA显卡驱动WSL 安装 NVIDIA显卡驱动 最近在研究一些 AIGC 工具,由于 Windows 加入了 WSL 之后的各种特性,本文记录一下如何在 WSL 的 Linux发行版 中安装 NVIDIA 显卡驱动的步骤,…

力扣第110题 平衡二叉数 c++ 树 深度优先搜索 二叉树

题目 110. 平衡二叉树 简单 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null…

车险计算器微信小程序源码 带流量主功能

车险计算器微信小程序源码带流量主功能&#xff0c;可以精准的算出车险的书目&#xff0c;是一个非常实用的微信小程序源码。 简单的计算让你得知车险价值 另外也支持流量主&#xff0c;具体小编也就不多说了&#xff0c;大家自己搭建研究吧。 源码下载&#xff1a;https://d…