项目技巧1

目录

创建项目工程的技巧

示例:创建父工程

第一步:初始化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())

使用BeanUtils工具类,进行对象复制

该工具类导入

<!--        引入web场景依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

两个对象的属性名称一致
使用BeanUtils必须保证属性名称和变量类型一致

         LoginRespVo loginRespVo = new LoginRespVo();
        //TODO:LoginRespVo和SysUser对象的属性名称一致
        //TODO:使用BeanUtils必须保证属性名称和变量类型一致
        BeanUtils.copyProperties(dbUser,loginRespVo);

前端解决跨域问题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落落落sss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值