项目技巧1

news2024/11/28 16:52:33

目录

创建项目工程的技巧

示例:创建父工程

第一步:初始化maven项目

 第二步:使用标签 抽取依赖的资源版本号,方便后续调整

第三步:配置父工程锁定的版本,使用 该标签的作用:锁定资源的版本号,但是不负责资源的导入

第四步:使用 让插件版本锁定 作用:不负责插件资源的导入,负责插件版本的锁定

创建公共子工程

​编辑 第一步:在父工程下新建模块,可以发现pom.xml文件自动使用标签导入父工程的依赖版本,这里的公共子工程需要使用jar包方式打包

 第二步:导入其他子工程共同需要的依赖,但是可以不写依赖版本号,因为父工程已经指定

创建其他子工程

导入公共子工程的依赖和自己所需要的依赖

导入自己所需要的插件

使用MybatisX插件快速生成mapper接口,mapperXml文件和每张表对应的pojo类

第一步:下载mybatisX

 第二步:使用idea连接数据库

第三步:配置信息,在公共子工程创建

 使用

使用JBLSpringBootAppGen插件快速生成SpringBoot启动类

下载​编辑

使用 

使用spring-security-crypto进行密码加密和校验

导入依赖

配置密码加密器

使用

使用commons-lang3工具包

导入依赖:

使用该包下的StringUtils工具类


创建项目工程的技巧

1.创建出一个父工程,让这个工程的pom.xml来管理子工程的依赖版本,即让子工程的依赖锁定,这样一来我们就可以在父工程的pom.xml文件中直接修改子工程的依赖版本

父工程的作用如下

1.通过该父工程聚合若干个子工程,统一管理若干工程的maven生命周期:clean,compile,package,install,deploy等
2.统一管理子工程的依赖版本(版本锁定)
3.统一管理子工程的插件的版本锁定
4.对于子工程公共的依赖,可以提取到父工程

2. 我们还可以在父工程下创建一个公共子工程,这个工程的作用就是导入其它子工程公共的依赖,这样一来,其他子工程只要导入这个公共子工程,就可以减少代码的冗余。

注意点:父工程使用pom方式打包,其他子工程使用jar包方式打包

因为子工程需要通过<parent>标签来引用父工程的依赖版本

示例:创建父工程

第一步:初始化maven项目

现在下面是一个父工程的pom.xml文件

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hhh</groupId>
    <artifactId>stock_parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <description>
        该工程是项目的父工程,核心作用:
            1.通过该父工程聚合若干个子工程,统一管理若干工程的maven生命周期:clean,compile,package,install,deploy等
            2.统一管理子工程的依赖版本(版本锁定)
            3.统一管理子工程的插件的版本锁定
            4.对于子工程公共的依赖,可以提取到父工程
    </description>
</project>

 第二步:使用<properties>标签 抽取依赖的资源版本号,方便后续调整

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <maven.surefire.version>2.12.4</maven.surefire.version>
        <mybatis-spring-boot-starter.version>2.1.4</mybatis-spring-boot-starter.version>
        <mysql-driver.version>5.1.49</mysql-driver.version>
        <junit.version>4.13.2</junit.version>
     <spring-boot.version>2.5.3</spring-boot.version>
    </properties>

 我们现在使用了<properties>标签来定义了依赖的资源版本号,这样子的好处就是修改版本十分方便

第三步:配置父工程锁定的版本,使用<dependencyManagement> 该标签的作用:锁定资源的版本号,但是不负责资源的导入

 <dependencyManagement>
        <dependencies>
<!--            引入单元测试junit依赖-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--引入springboot依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <!--将springboot中锁定的资源依赖与当前工程锁定的资源依赖进行合并,就是把<properties>标签内容合并-->
                <scope>import</scope>
            </dependency>
            <!--引入mybatis场景依赖-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis-spring-boot-starter.version}</version>
            </dependency>       
            <!--mysql驱动包-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-driver.version}</version>
            </dependency>     
        </dependencies>
    </dependencyManagement>

 注意:这里引入引入springboot依赖依赖时需要<type>指定打包方式,<scope>指定作用范围:

将springboot中锁定的资源依赖与当前工程锁定的资源依赖进行合并,就是把它们的<properties>标签内容合并

第四步:使用<pluginManagement> 让插件版本锁定 作用:不负责插件资源的导入,负责插件版本的锁定

 <build>
        <!--插件版本锁定 作用:不负责插件资源的导入,负责插件版本的锁定-->
        <pluginManagement>
            <plugins>
                <!--Springboot核心插件-->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                    <executions>
                        <execution>
                            <goals>
                                <!--防止打包时出现找不到springboot启动类的情况-->
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <excludes>
                            <!--插件运行时排除依赖-->
                            <exclude>
                                <groupId>org.springframework.boot</groupId>
                                <artifactId>spring-boot-configuration-processor</artifactId>
                            </exclude>
                        </excludes>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

这样一来父工程就搭建完毕,可以发现父工程没有导入依赖,只是让依赖版本锁定

创建公共子工程

 第一步:在父工程下新建模块,可以发现pom.xml文件自动使用<parent>标签导入父工程的依赖版本,这里的公共子工程需要使用jar包方式打包

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.hhh</groupId>
        <artifactId>stock_parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <packaging>jar</packaging>
    <artifactId>stock_common</artifactId>
    <description>
        该工程作用:
            1.抽取了项目中公共的开发资源,打成jar包,被其他工程引入,避免冗余开发
            2.公共的资源包括:pojo utils mapper接口 mapperXml 持久层相关的jar包依赖
    </description>
<properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>

 第二步:导入其他子工程共同需要的依赖,但是可以不写依赖版本号,因为父工程已经指定


    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
       
        <!--mybatis场景依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

       
        <!--apache工具包-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--配置提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>
    </dependencies>

创建其他子工程

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.hhh</groupId>
        <artifactId>stock_parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <packaging>jar</packaging>
    <artifactId>stock_backend</artifactId>
    <description>
        该工程核心作用    
    </description>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>

导入公共子工程的依赖和自己所需要的依赖

<dependencies>
<!--导入公共子工程-->
        <dependency>
            <groupId>com.hhh</groupId>
            <artifactId>stock_common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
<!--        引入web场景依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--        引入单元测试依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <!--密码加密和校验工具包-->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-crypto</artifactId>
        </dependency>
    </dependencies>

导入自己所需要的插件

 <build>
        <!--打包名称-->
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

使用MybatisX插件快速生成mapper接口,mapperXml文件和每张表对应的pojo类

第一步:下载mybatisX

 第二步:使用idea连接数据库

第三步:配置信息,在公共子工程创建

 

创建成功 

 使用

1.在SpringBoot启动类中使用@MapperScan注解扫描com.hhh.stock.mapper接口包帮这些接口类创建接口代理对象,并存入SpringIoC容器(相当于在每个接口类中添加@Mapper注解)

2.在yml文件中的mybatis配置中,扫描mapperXml文件以此让每个接口类都有一个对于的xml文件如果在接口类中使用注解,如@Select就不用扫描mapperXml文件

# 配置mybatis
mybatis:
  type-aliases-package: com.hhh.stock.pojo.entity  #批量给实体类取别名,方便在xml文件中使用别名
  mapper-locations: classpath:mapper/*.xml  #配置加载mapperXml文件资源
  configuration:
    map-underscore-to-camel-case: true # 开启驼峰映射
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #通过mybatis执行的sql以日志文件输出到终端
# web定义
server:
  port: 8091
spring:
  # 配置mysql数据源
  datasource:
    druid:
      username: root
      password: 1234
      url: jdbc:mysql://192.168.230.100:3306/stock_db?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai
      driver-class-name: com.mysql.jdbc.Driver
      # 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时
      initialSize: 6
      # 最小连接池数量
      minIdle: 2
      # 最大连接池数量
      maxActive: 20
      # 获取连接时最大等待时间,单位毫秒。配置了 maxWait 之后,缺省启用公平锁,
      # 并发效率会有所下降,如果需要可以通过配置 useUnfairLock 属性为 true 使用非公平锁。
      maxWait: 60000

# 配置mybatis
mybatis:
  type-aliases-package: com.hhh.stock.pojo.entity  #批量给实体类取别名,方便在xml文件中使用别名
  mapper-locations: classpath:mapper/*.xml  #配置加载mapperXml文件资源
  configuration:
    map-underscore-to-camel-case: true # 开启驼峰映射
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #通过mybatis执行的sql以日志文件输出到终端

使用JBLSpringBootAppGen插件快速生成SpringBoot启动类

下载

使用 

使用spring-security-crypto进行密码加密和校验

导入依赖

 <!--密码加密和校验工具包-->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-crypto</artifactId>
        </dependency>

配置密码加密器

@Configuration
public class CommonConfig {
    /**
     * 密码加密器
     * BCryptPasswordEncoder方法采用SHA-256对密码进行加密
     */
    @Bean
    public PasswordEncoder getPasswordEncoder(){
        return new BCryptPasswordEncoder();
    }
}

使用

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestPassWordEncoder {
    @Autowired
    private PasswordEncoder passwordEncoder;

    /**
     * 测试密码加密
     */
    @Test
    public void test1(){
        String password="123456";
        String encode = passwordEncoder.encode(password);
        System.out.println(encode);//$2a$10$Wj0KUaYvzERuVASW3w/oV.6Ov8eBrqd5STP9IQrq2orx6qVZ4JeJ2
    }

    /**
     * 测试密码匹配
     */
    @Test
    public void test2(){
        String password="123456";
        String enPwd="$2a$10$Wj0KUaYvzERuVASW3w/oV.6Ov8eBrqd5STP9IQrq2orx6qVZ4JeJ2";
        //TODO:第一个参数是没有加密的密码,第二个参数是加密后的密码
        boolean b = passwordEncoder.matches(password,enPwd);
        System.out.println(b?"密码匹配成功":"密码匹配失败");
    }
}

使用commons-lang3工具包

导入依赖:

<!--apache工具包-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

使用该包下的StringUtils工具类

如:判断内容是否为空-->长度为0或者为"     "都是空格,无内容

    public static boolean isBlank(CharSequence cs) {
        int strLen = length(cs);
        if (strLen == 0) {
            return true;
        } else {
            for(int i = 0; i < strLen; ++i) {
//防止"      "
//如果该字符串有一个索引不是空白(空格),就说明有内容
                if (!Character.isWhitespace(cs.charAt(i))) {
                    return false;
                }
            }

            return true;
        }
    }
StringUtils.isBlank(loginReqVo.getUsername())

前端解决跨域问题

 proxy: {// 跨域请求配置
            "/api": {
                secure: false,// 关闭安全检测,默认请求 https
                target: "http://localhost:8091",
                changeOrigin: true,
                // pathRewrite: {"^/api" : ""},
            }
        }

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

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

相关文章

初探Raft算法

在分布式系统有一个经典的CAP理论&#xff0c;C&#xff1a;一致性&#xff0c;即集群中所有节点都应该是一致的。A&#xff1a;可用性&#xff0c;集群一直处于可用状态。P&#xff1a;分区容错性&#xff1a;即复制所有数据到集群的所有节点&#xff0c;保证即使出现网络分区…

TQRFSOC开发板47DR,LMK04832更新配置

在利用RFSOC开发板进行项目开发时&#xff0c;面对多样化的时钟需求&#xff0c;巧妙地配置LMK04832时钟管理芯片以输出精确的时钟信号显得尤为重要。本期内容将讲解如何通过ZYNQ更新LMK04832的配置&#xff0c;以满足您的特定时钟需求。 每次配置成功后&#xff0c;配置文件都…

电路笔记(PCB):JLC PCB布局和走线基础教程笔记

对立创EDA 四层板PCB设计保姆级教程的笔记看完才发现是个虚假的教程&#xff0c;除了没教四层板咋画其它教了&#xff08;中间的两层全是GND的作用&#xff09; PCB布局 转换原理图 使用USB模块&#xff08;3.0集线器&#xff09;中的原理图。设计- - -》更新/转换原理图到P…

CSP内容安全策略

目录 CSP内容安全策略 一、引入 二、CSP内容安全策略 1、通过 HTTP 响应头信息的 Content-Security-Policy 的字段 2、通过网页的 meta 标签 3、在security的read.php页面&#xff0c;增加以下响应头 4、report-uri安全报告 5、其他安全配置 6、Web服务器全局配置 三…

机器学习:逻辑回归处理手写数字的识别

1、获取数据, 图像分割该数据有50行100列&#xff0c;每个数字占据20*20个像素点&#xff0c;可以进行切分,划分出训练集和测试集。 import numpy as np import pandas as pd import cv2 imgcv2.imread("digits.png")#读取文件 graycv2.cvtColor(img,cv2.COLOR_BGR2G…

8月20日

思维导图 面试题整理&#xff1a; 数据结构中顺序表和链表的区别? 顺序表&#xff1a; 1、存储方式&#xff1a;顺序表是一系列连续的内存空间&#xff0c;每个元素的地址可以通过索引计算出&#xff1b; 2、访问速度&#xff1a;由于不需要遍历查找&#xff0c;访问速度较…

一路坎坷-Mac下安装Python3、环境变量配置、安装jupyter notebook

遇到很多问题最终解决--Mac下安装Python3、环境变量配置、安装jupyter notebook 下载-安装python打开Mac终端-安装Jupyter给python3配置环境变量给jupyter配置环境变量配置遇到的问题 首先说一下我是先下载python3.8-然后安装&#xff1b;再在苹果电脑的终端下载Jupyter的&…

【JAVA CORE_API】Day18 网络编程、线程、在线聊天室v1.0

C/S&#xff1a;客户端/服务器端&#xff0c;所有网络应用都是基于客户端服务器端进行的&#xff0c;Java写的是服务端&#xff0c;客户端是一个软件&#xff0c;服务端也是一个软件&#xff0c;两个软件之间交互&#xff1b;&#xff08;只能连接对应的服务器&#xff09; B/…

使用 Arch Linux 几个月有感 | 为什么我选择 Arch Linux ,Arch 的优缺点有什么 | 一些Linux发行版推荐

&#xff08;终端是 Yakuake &#xff0c;KDE 自带&#xff09; 一点碎碎念&#xff0c;可以跳过不看 几年前从 CentOS 接触的 Linux &#xff0c;试图搭建一个KMS服务器 但是失败了 &#xff0c;后来装过 Ubuntu Debian deepin Kali Kubuntu Manjaro&#xff0c;踩一路坑最后…

线性数据结构的基本概念(数组,链表,栈,队列)

数组 数组由相同类型的元素组成&#xff0c;使用一块连续的内存来存储。 数组的特点是&#xff1a; 1.利用索引进行访问 2.容量固定 3.使用一块连续的内存来存储 各种操作的时间复杂度&#xff1a; 查找/修改&#xff1a;O&#xff08;1&#xff09;//访问特定位置的元素 插入…

day07_算法训练

案例零&#xff1a;整数反转&#xff08;大整数算法&#xff09; 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 暂时不用考虑数据太大的问题&#xff0c;把本题的核心思路写出来即可 比如&#xff1a; ​ 输入&#xff1a;x 123 ​ 输出…

一分钟带你了解叉车!

一、叉车的概念 叉车是指对整件托盘货物或大件桶装进行装卸、堆垛和短距离运输作业的各种搬运车辆。叉车是实现整件货物和散装物料机械化装卸、堆垛和短途运输的高效率工作车辆。 叉车常用于仓储大型物件的运输、车站、码头、机场、仓库、工地、货厂和工矿企业&#xff0c;是…

【案例47】enq: TX - row lock contention事件导致制单卡死

问题现象 制单时&#xff0c;选择公司就会卡住不动&#xff0c;其他节点正常。 问题分析 通过nmc排查&#xff0c;发现后台有很多制单线程卡住&#xff0c;时间较久&#xff0c;并且当前的事件都是在数据库执行sql层面。并且每条线程的卡住语句都为update语句&#xff0c;怀…

Openstack 与 Ceph集群搭建(中): Ceph部署

文章目录 一、部署前说明1. ceph 版本选择依据2. ceph网络要求3. 硬件要求 二、部署架构三、部署过程1. 通用步骤2. 部署管理节点创建账号安装Cephadm运行bootstrap 3. 登录Ceph web4. 将其他节点加入集群同步ceph key安装ceph CLI命令行添加主机节点到集群添加OSD节点将监控节…

[数据集][目标检测]机械常用工具检测数据集VOC+YOLO格式4713张8类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4713 标注数量(xml文件个数)&#xff1a;4713 标注数量(txt文件个数)&#xff1a;4713 标注…

配置typora上传图片到Chevereto图床

目录 一、下载安装PicGo二、配置PicGo三、配置Typora 一、下载安装PicGo PicGo下载地址点击进入 进入官网后点击下载&#xff0c;会跳转到GitHub,如图,选择对应的操作系统版本下载 下载完成后单击安装&#xff08;本文已windows系统为例&#xff09; 二、配置PicGo 点击插件设…

华为OD机试 - 密码输入检测 字符串

只在本地跑过&#xff0c;不确保一定对 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h>#define setbit(value,bit) (value value |(1<<bit))int main(void) {char buf[201];char out[201];int i 0;int to…

UploadLabs靶场环境

目录 UploadLabs靶场环境 第十八题 第十九题 第二十一题 UploadLabs靶场环境 .php .php. . 第五&#xff0c;十关访问的时候空格必须要使用 %20代替 第七题在linux服务器上的话&#xff0c;文件名如果末尾只存在空格并不会自动删除&#xff0c;还会保留&#xff0c;但是这…

合宙Air700ECQ硬件设计手册——应用接口1

Air700ECQ是一款高度集成的LTE Cat1无线通信模组&#xff0c;基于移芯EC716E平台设计&#xff0c;有着极小的封装和极高的性价比。 它支持移动双模FDD-LTE/TDD-LTE 4G远距离无线传输技术&#xff0c;能够广泛应用于共享设备、定位器、DTU数传等多种场景。 此外&#xff0c;Air7…

2024年互联网公司时薪排行榜大曝光!

2024年互联网公司时薪排行榜重磅出炉&#xff01;这一次&#xff0c;行业薪资数据的透明度前所未有&#xff0c;看完这份榜单&#xff0c;你会发现互联网圈子的贫富差距竟然如此悬殊&#xff0c;不禁让人直呼“酸了”&#xff01; 在这个人人都关注收入与回报的时代&#xff0…