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