使用SpringToolSuite快速构建一个SpringBoot项目

话不多说,直奔主题。

先上效果图

springtoolsuite svn配置_bootstrap

1、搭建开发环境

安装JDK(至少1.8),安装SpringToolSuite,此处这两个安装我就不再废话了,直接跳过。

2、安装Maven

安装就略过了,一般都是直接解压即可。

maven下载地址:http://maven.apache.org/download.cgi

maven解压完毕

springtoolsuite svn配置_bootstrap_02

2.1、配置maven环境变量

新建环境变量MAVEN_HOME

变量名:MAVEN_HOME

变量值:D:\Program Files\apache-maven-3.6.3(Maven的解压路径)

springtoolsuite svn配置_spring_03


将新添加的MAVEN_HOME添加到path中

%MAVEN_HOME%\bin

springtoolsuite svn配置_java_04


mvn -v命令查看,出现如下,则表示安装成功,虽然安装成功,也能使用,但是此时用的镜像仓库是国外的,这里我们需要把镜像替换成alibaba的

springtoolsuite svn配置_mysql_05

2.2、settings.xml更换maven镜像仓库地址

在我们的安装目录下,找到settings.xml文件,添加阿里镜像。

springtoolsuite svn配置_mysql_06


springtoolsuite svn配置_mysql_07

<mirror>
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    </mirror>

2.3、settings.xm设置本地maven仓库地址

创建本地仓库文件夹:D:\workSpace\repository

springtoolsuite svn配置_bootstrap_08


修改settings.xml中的本地

springtoolsuite svn配置_mysql_09

2.4、sts-preferences设置Installations

打开我们的STS,在eclipse中设置maven的Installations

springtoolsuite svn配置_mysql_10

2.5、sts-preferences设置User Settings

springtoolsuite svn配置_bootstrap_11

3、创建Stater Project

3.1、设置New Spring Starter Project参数

springtoolsuite svn配置_bootstrap_12

3.2、选择依赖

根据自身情况选择SpringBootversion版本,以及自己需要使用的架包.

Spring Boot DevTools :热部署

Spring Web :囊括了spring Web项目的包

thymeleaf:模板引擎

Mybatis Framework :mybatis框架

springtoolsuite svn配置_mysql_13

创建项目后,发现如下报错信息,mavan已经给我们管理架包了,所以架包不太可能会出现冲突,出现的问题,可能是maven的版本问题。如下问题就是maven问题。

springtoolsuite svn配置_mysql_14


在2.2中,我们选择的版本是2.2.2版本,但是可能我们所安装的maven不一定适用该版本,因此我们可以修改版本。如修改到2.1.0版本。修改版本后,项目鼠标右键—》maven—》update project。等待更新架包即可。

springtoolsuite svn配置_bootstrap_15

3.3、添加依赖

如果我们创建项目的时候没有勾选的驱动,框架架包等,我们也可以自行在pom文件中添加,如这里添加了mysql的驱动。

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<!--mysql驱动  -->
	<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
	</dependency>
	<!--mybatis依赖  -->
	<dependency>
		<groupId>org.mybatis.spring.boot</groupId>
		<artifactId>mybatis-spring-boot-starter</artifactId>
		<version>2.1.1</version>
	</dependency>

3.4、配置application

可以采用yalm,也可以采用properties,这里我们采用properties。
 server.port=8081
 #设置前端模板引擎
 spring.thymeleaf.prefix=classpath:/templates/
 spring.thymeleaf.suffix=.html
 spring.thymeleaf.mode=HTML5
 #设置开启或者关闭和thymeleaf的页面缓存
 spring.thymeleaf.cache=false
 #设置热部署
 spring.devtools.restart.enabled=true
 #设置需要开启热部署的文件目录
 spring.devtools.restart.additional-paths=src/main/java
 #设置mysql连接
 spring.datasource.url = jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8
 spring.datasource.username = root
 spring.datasource.password = 123456
 spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
 #设置日期格式化
 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
 spring.jackson.time-zone=GMT+8
 spring.jackson.serialization.write-dates-as-timestamps=false
 #设置日志
 logging.path=/softwareLifeCycle/target/log
 logging.file=softwareLifeCycle.log
 logging.level.root=info
 logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
 logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n


至此,我们的配置工作基本完成,上述配置中,模板引擎和mysql是必须,而其他的配置,如果没有配置,则会采用系统默认的配置。

4、开始编写我们的项目

4.1、创建如下目录(可自己随意创建),编写启动类

通过STS的创建的spring Boot项目,会给我们自动创建好了启动类

springtoolsuite svn配置_java_16

4.2、配置注入返回的数据实体类

springtoolsuite svn配置_bootstrap_17

public class ResultData implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private String resultCode;
	
	private String resultInfo;
	
	private String token;
	
	public Object data;

	public String getResultCode() {
		return resultCode;
	}
	
	public void setResultCode(String resultCode) {
		this.resultCode = resultCode;
	}

	public String getResultInfo() {
		return resultInfo;
	}

	public void setResultInfo(String resultInfo) {
		this.resultInfo = resultInfo;
	}

	public String getToken() {
		return token;
	}

	public void setToken(String token) {
		this.token = token;
	}

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}

	@Override
	public String toString() {
		return "ResultData [resultCode=" + resultCode + ", resultInfo=" + resultInfo + ", token=" + token + ", data="
				+ data + "]";
	}
@Configuration
public class ResultDataConfiguration {
	
	/**
	 * @Description: 统一处理返回数据
	 * @author hutao
	 * @mail hutao_2017@aliyun.com
	 * @date 2019年12月22日
	 */
	@Bean
    public ResultData resultData() {
		return new ResultData();
    }
}

4.3、编写我们的控制器类

springtoolsuite svn配置_bootstrap_18


备注 @RestController 采用rest风格请求,因此是需要返回数据的,而不是返回页面,用了RestController注解,该控制器的方法就不能使用返回String的形式去返回页面了。

因此如果需要实现以下效果,不能使用RestController

springtoolsuite svn配置_java_19

4.4、编写我们的service实现类

下述这个代码中,service没有将查询的数据库直接返回给控制器,而是将与数据库持久化的对象的镜像返回给控制器。

springtoolsuite svn配置_java_20


import java.util.ArrayList;
 import java.util.List;
import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.util.CollectionUtils;/**
• @Description: 对象转换工具类,将资源类Source转化为目标类Target
• @author hutao
• @mail hutao_2017@aliyun.com
• @date 2019年12月19日
 */
 public class ClassConverter<Source, Target> {
 protected static final Logger logger = LoggerFactory.getLogger(ClassConverter.class);
/**• @Description: 将单个的Source对象转化成单个的Target对象
• @author hutao
• @mail hutao_2017@aliyun.com
• @date 2019年12月19日
 */
 public Target convert(Source source, Class clazz) {
 if (source == null) {
 return null;
 }
 Target target = null;
 try {
 target = clazz.newInstance();
 } catch (Exception e) {
 logger.error(“初始化{}对象失败,失败原因”, clazz, e);
 }
 convert(source, target);
 return target;
 }/**
• @Description: 批量将List集合转化成List集合
• @author hutao
• @mail hutao_2017@aliyun.com
• @date 2019年12月19日
 */
 public List convert(List listSource, Class clazz) {
 if (CollectionUtils.isEmpty(listSource)) {
 return null;
 }
 List listTarget = new ArrayList();
 try {
 for (Source source : listSource) {
 listTarget.add(convert(source, clazz));
 }
 return listTarget;
 } catch (Exception e) {
 logger.error(“批量将List集合转化成List集合失败,失败原因:”+e);
 }
 return null;}
/**
• @Description: 属性拷贝方法,有特殊需求时子类覆写此方法
• @author hutao
• @mail hutao_2017@aliyun.com
• @date 2019年12月19日
 */
 private void convert(Source source, Target target) {
 try {
 BeanUtils.copyProperties(source, target);
 } catch (Exception e) {
 logger.error(“属性转换异常,异常原因:”+e);
 }
 }
 }

4.5、编写我们的mapper接口

springtoolsuite svn配置_bootstrap_21


public class Company implements Serializable{
 /**
 *
 */
 private static final long serialVersionUID = 1L;
private String companyName;//公司名称

private String companyAddress;//公司地址

private String emailAddress;//邮件

private String userName;

private String passWord;

private String companyCode;//公司编号码

private String customerType;//客户类型 : F免费客户   A级收费客户  B级收费客户  C级收费客户

private String operator;//操作者

private String status;//状态:S申请中  Y有效   W无效(过期)

private Date startEffectTime;//有效开始日期

private Date endEffectTime;//有效结束日期

private Date createTime;

private Date updateTime;

public String getCompanyName() {
	return companyName;
}

public void setCompanyName(String companyName) {
	this.companyName = companyName;
}

public String getCompanyAddress() {
	return companyAddress;
}

public void setCompanyAddress(String companyAddress) {
	this.companyAddress = companyAddress;
}

public String getEmailAddress() {
	return emailAddress;
}

public void setEmailAddress(String emailAddress) {
	this.emailAddress = emailAddress;
}

public String getUserName() {
	return userName;
}

public void setUserName(String userName) {
	this.userName = userName;
}

public String getPassWord() {
	return passWord;
}

public void setPassWord(String passWord) {
	this.passWord = passWord;
}

public String getCompanyCode() {
	return companyCode;
}

public void setCompanyCode(String companyCode) {
	this.companyCode = companyCode;
}

public String getCustomerType() {
	return customerType;
}

public void setCustomerType(String customerType) {
	this.customerType = customerType;
}

public String getOperator() {
	return operator;
}

public void setOperator(String operator) {
	this.operator = operator;
}

public String getStatus() {
	return status;
}

public void setStatus(String status) {
	this.status = status;
}

public Date getStartEffectTime() {
	return startEffectTime;
}

public void setStartEffectTime(Date startEffectTime) {
	this.startEffectTime = startEffectTime;
}

public Date getEndEffectTime() {
	return endEffectTime;
}

public void setEndEffectTime(Date endEffectTime) {
	this.endEffectTime = endEffectTime;
}

public Date getCreateTime() {
	return createTime;
}

public void setCreateTime(Date createTime) {
	this.createTime = createTime;
}

public Date getUpdateTime() {
	return updateTime;
}

public void setUpdateTime(Date updateTime) {
	this.updateTime = updateTime;
}

@Override
public String toString() {
	return "Company [companyName=" + companyName + ", companyAddress=" + companyAddress + ", emailAddress="
			+ emailAddress + ", userName=" + userName + ", passWord=" + passWord + ", companyCode=" + companyCode
			+ ", customerType=" + customerType + ", operator=" + operator + ", status=" + status
			+ ", startEffectTime=" + startEffectTime + ", endEffectTime=" + endEffectTime + ", createTime="
			+ createTime + ", updateTime=" + updateTime + "]";
}

5、开始编写我们的前端

5.1、编写HTML页面

公司申请管理页面

<link rel="stylesheet" href="../plugins/bootStrap/css/bootstrap.min.css">  
	<script src="../plugins/jquery-3.0.0/jquery-3.0.0.min.js"></script>
	<script src="../plugins/bootStrap/js/bootstrap.min.js"></script>       
	<script src="../plugins/bootStrap/js/bootstrap-table.min.js"></script>       
	 
    <script src="../js/common/httpUrlConstant.js"></script>
    <script src="../js/common/httpUtils.js"></script>
    
    <script src="../js/company/application.js"></script>
    
</head>
<body>
	<div id = "" style="width:100%">
		<table class="table table-hover" id = "applicationCompany"></table>
	</div>
</body>

### 5.2、编写JS #### httpUtils.js /** *

请求提交Object对象 * @author hutaoa * var data = { * "userName":$("#userName").val(), "passWord":$("#passWord").val(), "token":"" * } * */ function httpRequestForObjetc(url,objectData){ var resultData; $.ajax({ type: "POST", url: url, data:objectData, async: false, dataType: "json", success: function(rdata){ resultData = rdata; }

});
return resultData;
}
 /**• 请求提交Json字符串 
*/
 function httpRequestForJson(url,jsonStrData){
 var resultData;
 $.ajax({
 type: “POST”,
 contentType: “application/json;charset=UTF-8”,//Spring MVC @RequestBody注解做提交json字符串自动绑定到pojo入参
 url: url,
 data:jsonStrData,
 async: false,
 dataType: “json”,
 success: function(rdata){
 resultData = rdata;
 }});
return resultData;}
 /**• 请求提交form表单文件 
• @author hutaoa
 */
 function httpRequestForFile(url,formData){
 var resultData;
 $.ajax({
 url:url,
 type: ‘POST’,
 data: formData,
 async: false,
 cache: false,
 contentType: false,
 processData: false,
 success: function (data) {
 resultData = data;
 },
 error: function (data) {
 alert(“文件上传失败,请联系管理员”);
 }
 });
 }httpUrlConstant.js
var baseUrl = “http://127.0.0.1:8081/”
 /**• 跳转页面地址
 */
 var pageUrlConstant = {
 //登录地址
 “login” : baseUrl+“page/login”,
 //忘记密码地址
 “forget”:baseUrl+“page/forgetPassword”,
 //注册地址
 “register”:baseUrl+“page/register”,
 //PC系统主页面
 “homeMain”:baseUrl+“page/homeMain”,
 }/**
• 处理公司模块接口地址
/
 var companyUrlConstant = {
 //提交公司注册信息
 “registerSubmit”:baseUrl+“company/registerSubmit”,
 //认证公司注册信息
 “registerApprove”:baseUrl+“company/registerApprove”,
 //查询公司信息
 “queryApplication”:baseUrl+“company/queryApplication”
 }
 /*• 处理用户模块接口地址
 */
 var userUrlConstant = {
 //登录认证地址
 “loginApprove”:baseUrl+“user/loginApprove”
 }
 var httpUrlConstant = {
 “token”:"",
 “pageUrlConstant”:pageUrlConstant,
 “companyUrlConstant”:companyUrlConstant,
 “userUrlConstant”:userUrlConstant
 }application.js
$(function () {
 initApplicationCompanyTable();
 })/**
• 初始化申请公司表格
 */
 function initApplicationCompanyTable(){
 var url = httpUrlConstant.companyUrlConstant.queryApplication;
 $(’#applicationCompany’).bootstrapTable({
 url: url,
 //url:"…/data/company.json",
 queryParams:{“status”:“A”},//状态为申请中的
 method:‘POST’,
 dataType:‘json’,
 contentType : “application/x-www-form-urlencoded”,
 pagination:true,
 search:true,
 cache: false,
 pageNumber:1,
 pageSize: 10,
 columns: [
 {field: ‘companyCode’,title: ‘公司代码’, align: ‘center’},
 {field: ‘companyName’,title: ‘公司名称’, align: ‘center’,},
 {field: ‘emailAddress’,title: ‘邮箱’, align: ‘center’,},
 {field: ‘userName’,title: ‘登录用户’, align: ‘center’,},
 {field: ‘customerType’,title: ‘客户类型’, align: ‘center’,},
 {field: ‘companyAddress’,title: ‘公司地址’, align: ‘center’,},
 {field: ‘createTime’,title: ‘申请时间’, align: ‘center’,}
 ]
 });
 }