1. 搭建SpringBoot
-
創建一個新項目,選擇Spring-boot 官方模板
-
填寫項目信息
-
選擇插件,依賴,這裏我們選擇以下插件和依賴
建好之後,我們的項目結構是這樣的
接下來讓我們調整一下,更接近真實項目中的結構
2. 項目結構調整
- 首先,我們將後端代碼結構調整爲這樣
| 包名|說明 |
|–|--|
|annotation|放置項目自定義註解|
|aspect|放置切面代碼|
|config|放置配置類|
|constant|放置常量、枚舉等定義|
|consist|存放常量定義|
|enums|存放枚舉定義|
|controller|放置控制器代碼|
|filter|放置一些過濾、攔截相關的代碼|
|mapper|放置數據訪問層代碼接口|
|model|放置數據模型代碼|
|entity|放置數據庫實體對象定義|
|dto|存放數據傳輸對象定義|
|vo|存放顯示層對象定義|
|service|放置具體的業務邏輯代碼(接口和實現分離)|
|serviceIntf|存放業務邏輯接口定義|
|serviceImpl|存放業務邏輯實際實現|
|utils|放置工具類和輔助代碼| - 然後將前端代碼結構調整爲這樣
名稱 | 說明 |
---|---|
mapper | 存放mybatis的XML映射文件(如果是mybatis項目 |
static | 存放網頁靜態資源 |
js | 顧名思義 |
css | 顧名思義 |
img | 顧名思義 |
template | 存放網頁模板,比如thymeleaf/freemarker模板等 |
header | 頁面頭部 |
model | 業務頁面 |
default | 存放默認頁面,歡迎頁或者錯誤定向頁面 |
bottom | 頁面尾部 |
application.yml | 基本配置文件 |
application-dev.yml | 開發環境配置文件 |
application-test.yml | 測試環境配置文件 |
application-prod.yml | 生產環境配置文件 |
3. 編寫項目配置文件
之前一共引用了mybatis,redis以及thymeleaf模板引擎需要配置yml以及class文件再使用
- 多profile切換
我們在開發應用時,通常一個項目會被部署到不同的環境中,比如:開發、測試、生產等。其中每個環 境的數據庫地址、服務器端口等等配置都會不同,對於多環境的配置,大部分構建工具或是框架解決的 基本思路是一致的,通過配置多份不同環境的配置文件,再通過打包命令指定需要打包的內容之後進行 區分打包
application.yml
spring:
profiles:
active: dev
server:
servlet:
context-path: /demo
application-dev.yml
spring:
profiles: dev
server:
port: 8082
配置好後,啓動主類就是端口就是8082,而系統路徑爲/demo,不過現在啓動會報沒有配置數據層的錯誤,現在讓我們正式開始配置
- 配置mybatis
首先,我們需要先引入驅動,mysql的版本有很多,那麼這次我用oracle進行演示,首先引入oracle驅動,這個驅動不在mvn庫裏,只能從官網下下來再install到自己的本地庫中
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
再在我們需要使用的yml中配置連接信息,以及文件配置
application-dev.yml
spring:
profiles: dev
datasource:
url: jdbc:oracle:thin:@172.16.23.189:8086:orcl
username: ZHGBSYS
password: ZHGBSYS
driverClassName: oracle.jdbc.driver.OracleDriver
mybatis:
configuration:
map-underscore-to-camel-case: true//駝峯命名
mapper-locations: classpath:/mapper/*.xml
server:
port: 8082
配置自己實體類和mapper文件
這裏需要提醒一點,上面的截圖是錯的,mapper方法不能重載,方法ID必須唯一,不然mybatis不能創建代理對象
最後在啓動主類中追加,對mapper的掃描
現在讓我們測試一下
先寫一個service,方便測試
啓動主類添加service層掃描
現在在測試類中編寫方法測試
測試結果:
mybatis集成完畢
2. 配置redis
- 配置url信息
application.yml
spring:
profiles:
active: dev
server:
servlet:
context-path: /demo
mybatis:
configuration:
map-underscore-to-camel-case: true #開啓駝峯命名
mapper-locations: classpath:/mapper/*.xml
- 配置 redisTemplete 默認序列化對象
package com.rxl.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
//設置自己的序列化工具
//Jackson2JsonRedisSerializer<Object>(Object.class)帶雙引號
//new StringRedisSerializer() 不帶雙引號
template.setDefaultSerializer(new StringRedisSerializer());
//template.setKeySerializer(new StringRedisSerializer());
//template.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
- 編寫工具類
添加com.alibaba.fastjson 依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
package com.rxl.utils;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.alibaba.fastjson.TypeReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.List;
@Component
public class RedisUtil {
@Autowired
private RedisTemplate<Object, Object> redisTemplate;
/**
* @description 向Redis中存入實體類對象
* @param Key 鍵值
* @param value 實體類
* @return void
* @throws JsonProcessingException json轉換異常
* @author rxl
* @date 2020/4/27 16:02
*/
public void setInRedis(String Key, Object value) throws JsonProcessingException {
if(value==null)
return;
redisTemplate.opsForValue().set(Key,JSON.toJSONString(value));
}
/**
* @description 從redis中取實體類對象
* @param Key 鍵值
* @param clazz 對象類型
* @return T
* @throws IOException 讀取異常
* @author rxl
* @date 2020/4/27 16:04
*/
public <T> T getPojoFromRedis(String Key,Class<T> clazz) throws IOException {
Object value = redisTemplate.opsForValue().get(Key);
if (value==null)
return null;
return JSON.parseObject(value.toString(),clazz);
}
/**
* @description 從redis中取實體類對象的List集合
* @param Key 鍵值
* @param clazz 對象類型
* @return java.util.List<T>
* @throws IOException 讀取異常
* @author rxl
* @date 2020/4/27 16:05
*/
public <T> List<T> getListFromRedis(String Key, Class<T> clazz) throws IOException {
Object value = redisTemplate.opsForValue().get(Key);
if (value==null)
return null;
TypeReference<List<T>> typeReference = new TypeReference<List<T>>(clazz) {};
return JSON.parseObject(value.toString(),typeReference);
}
}
- 編寫測試方法
別忘了,在啓動主類中添加掃描
不然是不會將組件對象納入spring管理的
測試結果:
redis集成完畢
- 集成thymeleaf和webJars
pom.xml
<!--前端依賴-->
<!--thymeleaf模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--webjars 前端資源管理-->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1-2</version>
</dependency>
application.yml
spring:
profiles:
active: dev
thymeleaf:
prefix: classpath:/templates/
server:
servlet:
context-path: /demo
mybatis:
configuration:
map-underscore-to-camel-case: true #開啓駝峯命名
mapper-locations: classpath:/mapper/*.xml
配置自定義變量或默認頁
package com.rxl.config;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
@Configuration
public class ThymeleafConfig implements WebMvcConfigurer {
@Resource
private Environment env;//取yml中的值
/**
* @description 設置Thymeleaf全局變量
* @param viewResolver Thymeleaf視圖處理器
* @return void
* @author rxl
* @date 2020/4/27 21:56
*/
@Resource
private void configureThymeleafStaticVars(ThymeleafViewResolver viewResolver) {
if(viewResolver != null) {
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("ctx", env.getProperty("server.servlet.context-path"));
viewResolver.setStaticVariables(vars);
}
}
/**
* @description 設置默認頁
* @param registry 視圖註冊器
* @return void
* @author rxl
* @date 2020/4/27 21:57
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/index").setViewName("default/index");
}
}
index.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org" lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript"
th:src="@{/webjars/jquery/3.3.1-2/jquery.min.js}"></script>
</head>
<body>
<th:block th:inline="text">
ctx: [(${ctx})]
</th:block>
<!--/*@thymesVar id="ctx" type="java.lang.String"*/-->
<a href="#" th:if="${ctx} != null" ><span th:text="全局變量獲取成功"></span></a>
</body>
<script type="text/javascript">
$(function () {
var ctx = '[(${ctx})]';
alert('jquery成功加載,且全局變量獲取成功'+ctx);
});
</script>
</html>
試試運行結果
運行成功,集成完畢
4. 文檔整合
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.rxl.example</groupId>
<artifactId>spring-boot_demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot_demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--前端依賴-->
<!--thymeleaf模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--webjars 前端資源管理-->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1-2</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-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
<!--工具插件-->
<!--springboot熱加載插件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!--lombok管理插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--json處理工具-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
<!--測試-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
源碼下載:
鏈接:https://pan.baidu.com/s/1zdN7FZ44mi8gAIrg7LKEmg
提取碼:rhy2