目录
创建项目工程的技巧
示例:创建父工程
第一步:初始化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" : ""},
}
}