使用SpringToolSuite快速構建一個SpringBoot項目
話不多說,直奔主題。
先上效果圖
1、搭建開發環境
安裝JDK(至少1.8),安裝SpringToolSuite,此處這兩個安裝我就不再廢話了,直接跳過。
2、安裝Maven
安裝就略過了,一般都是直接解壓即可。
2.1、配置maven環境變量
2.2、settings.xml更換maven鏡像倉庫地址
<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倉庫地址
2.4、sts-preferences設置Installations
2.5、sts-preferences設置User Settings
3、創建Stater Project
3.1、設置New Spring Starter Project參數
3.2、選擇依賴
根據自身情況選擇SpringBootversion版本,以及自己需要使用的架包.
Spring Boot DevTools :熱部署
Spring Web :囊括了spring Web項目的包
thymeleaf:模板引擎
Mybatis Framework :mybatis框架
創建項目後,發現如下報錯信息,mavan已經給我們管理架包了,所以架包不太可能會出現衝突,出現的問題,可能是maven的版本問題。如下問題就是maven問題。
在2.2中,我們選擇的版本是2.2.2版本,但是可能我們所安裝的maven不一定適用該版本,因此我們可以修改版本。如修改到2.1.0版本。修改版本後,項目鼠標右鍵—》maven—》update project。等待更新架包即可。
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項目,會給我們自動創建好了啓動類
4.2、配置注入返回的數據實體類
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 [email protected]
* @date 2019年12月22日
*/
@Bean
public ResultData resultData() {
return new ResultData();
}
}
4.3、編寫我們的控制器類
備註 @RestController 採用rest風格請求,因此是需要返回數據的,而不是返回頁面,用了RestController註解,該控制器的方法就不能使用返回String的形式去返回頁面了。
因此如果需要實現以下效果,不能使用RestController
4.4、編寫我們的service實現類
下述這個代碼中,service沒有將查詢的數據庫直接返回給控制器,而是將與數據庫持久化的對象的鏡像返回給控制器。
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 [email protected]
-
@date 2019年12月19日
*/
public class ClassConverter<Source, Target> {
protected static final Logger logger = LoggerFactory.getLogger(ClassConverter.class);/**
- @Description: 將單個的Source對象轉化成單個的Target對象
- @author hutao
- @mail [email protected]
- @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 [email protected]
- @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 [email protected]
- @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接口
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’,}
]
});
}