Spring Boot教程
[TOC]
1.idea创建Spring boot项目
在IDEA中创建一个Java Web项目。
- Spring Boot 项目(本次使用)



项目创建完成后,Maven会自动进行相关依赖jar文件的下载,首次下载需要等待的时间较长。下载完成后,右侧Maven工具栏中不再出现报错信息:


2. 导入地图服务的相关内容
在IDEA中创建一个Java Web项目。
将大数据方向实训课前资料\2.地图页面\static.zip
解压缩后,将static文件夹下的所有内容拷贝到项目的src/main/resource/static
目录下。

nymap.html中保存了地图服务的代码,可以打开该页面,点击右侧的浏览器按钮,使用本地浏览器访问该页面。

地图服务背景知识
3. 服务器端开发
服务器端程序的作用:
- 能够接受浏览器发来的请求,获取浏览器发来的用户行为数据
- 将用户行为数据写入到数据库中
用例(Use Case)组件设计:

首次运行持久层测试用例前的配置(选一种配置文件方法)
有一种配置是yml文件的,properties和yml配置文件使用一种就行(两种都存在就删掉一种,两种同时存在的话应该是后面的会把前面的配置覆盖掉)
1.配置文件修改
方案一 application.properties
修改(也可以多文档切换配置,需要看官网文档)
1 | # 应用名称 |
方案二 .yml
文件配置
生产环境和开发环境自动切换,默认是开发模式,如果需要使用生产模式可以创建环境变量
如果windows中不想写环境变量idea也可以修改某个地方即可即可切换为开发环境,就不用修改环境变量了,直接做第2小结就可以了
1.配置环境变量
变量名
1 | PRODUCTION |
- 变量值
1 | prod |
**注意:windows电脑需要重启让环境变量生效,linux中用环境变量生效命令 **
2.Spring boot默认初始会先看application.yml文件
application.yml
1 | spring: |
application-dev.yml
开发模式配置
1 | server: |
application-prop.yml
生产环境配置
1 | server: |
项目中文件截图
1.开发实体类
创建
cn.tedu.nybike.entity
包在
entity
包下新建OperationDO
类,用于封装用户的一次操作记录1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public class OperationDO {
private Integer id;
private String userIp;
private Date createdTime;
private Integer optType;
private Double zoomStartLevel;
private Double zoomEndLevel;
private Double dragStartLat;
private Double dragStartLng;
private Double dragEndLat;
private Double dragEndLng;
private String stationId;
// 这里省略toString, get/set, 无参构造器
}创建
cn.tedu.nybike.util
包将
unti.zip
解压缩,将其中的2个文件JsonResult.java
和IpUtils.java
复制到util包中
2.开发持久层
创建
cn.tedu.nybike.dao
包在
dao
包下创建OperationDAO
接口(interface)在
OpeartionDAO
接口中声明抽象方法insertOperation(OperationDO optDO)
1
2
3
4
5
6
7
8
9
10
11
12
13/**
* 用户操作模块的持久层接口
*/
public interface OperationDAO {
/**
* 向数据库中添加一行操作记录
* @param optDO 一行操作记录
* @return 添加成功的数据条数
*/
int insertOperation(OperationDO optDO);
}在
src/main/resources
下创建mappers
文件夹将下载的
OperationMapper.xml
拷贝到mappers
文件夹中在
OperationMapper.xml
中添加要执行的SQL语句1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!-- namespace:当前XML文件用于配置哪个接口中抽象方法对应的SQL语句 -->
<mapper namespace="cn.tedu.nybiket.dao.OperationDAO">
<!--向数据库中添加一行操作记录-->
<!--int insertOperation(OperationDO optDO)-->
<insert id="insertOperation" >
insert into t_operation(
user_ip, created_time, opt_type,
zoom_start_level, zoom_end_level,
drag_start_lat, drag_start_lng,
drag_end_lat, drag_end_lng, station_id
) values (
#{userIp}, now(), #{optType},
#{zoomStartLevel}, #{zoomEndLevel},
#{dragStartLat}, #{dragStartLng},
#{dragEndLat}, #{dragEndLng}, #{stationId}
)
</insert>
</mapper>
3.开发持久层测试用例
打开
OperationDAO
接口,光标点击接口中任意一行,右键 ->Generate...
->Test...
,打开自动生成测试用例的对话框对话框中的内容保持默认,勾选
insertOperation..
方法前的复选框,点击OKIDEA会在动在
src/test/java
下的对应包中生成测试类OprtionDAOTest
在该类中编写测试用例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class OperationDAOTest {
// 该注解的作用是通知Spring框架查找OperationDAO类型的对象
// 将该对象的引用添加到dao属性中
OperationDAO dao;
void insertOperation() {
// 创建一个DO对象,封装要添加到数据库中的数据
OperationDO optDO=new OperationDO();
optDO.setUserIp("127.0.0.1");
optDO.setStationId("7789");
// 调用dao的方法,将数据写入数据库
int row = dao.insertOperation(optDO);
// 在控制台输出插入成功的数据条数
System.err.println("row="+row);
}
}
4.在项目的主类(cn.tedu.nybike.NybikeApplication)前添加注解
1 | //这是应该是配置的base-package范围太大,导致service层的接口也被包装,将base-package的范围缩小到dao即可 |
运行测试用例
点击测试方法前的绿色播放键,执行测试用例,如出现如下提示,表示测试用例运行成功。
5.开发业务层
在src/main/java下新建cn.tedu.nybike.service
包。
在该包下新建OperationService
接口,并在类中开发对应的业务层方法。
1 | package cn.tedu.nybike.service; |
在src/main/java下新建cn.tedu.nybike.service.Impl
包。
在该包下新建OperationServiceImpl
类继承OperationService
接口,并在类中开发对应的业务层方法。
1 | package cn.tedu.nybiket.service.impl; |
6.开发业务层测试用例
光标选中OperationService
类中任意位置,右键 ->Generate… -> Test… ,在里面勾选saveOpeartion
前面的复选框,然后点OK,自动生成测试类。
1 |
|
7.开发控制器层
在src/main/java下新建cn.tedu.nybike.controller
包。
在该包下新建OperationController
类,并在类中开发对应的控制器层方法。
1 |
|
8.测试控制器层
通过项目主类NybikeApplication
的main方法启动项目。
在浏览器地址栏访问http://localhost:8080/opt/save?optType=1&stationId=1234
,如果页面显示如下信息,说明访问成功。

常见问题:
如果显示连接被拒绝,或无法连接:项目没有正常启动
如果显示连接异常,状态码为404:请求的路径和控制器层提供的路径不对应,检查
OperationController
中两个@RequestMapping
注解的值是否正确如果显示连接异常,状态码为500:服务器执行程序时出现异常,在IDEA的控制台中会有具体的报错信息,根据报错信息排查对应的问题
如果提交了请求参数,但是查询数据库时发现对应的参数值没有被写进数据库:一般是提交参数的参数名和实体类中的属性名不一致导致的,核对参数名和属性名
注:对服务器代码进行修改后,需要重启项目,新的代码才会生效
9.前端向后台发送数据(前端的代码的一部分不全主要学习springboot)
在nymap.html中添加如下代码:
- 采集缩放行为
1 | // 用于记录缩放开始级别的变量 |
- 采集拖拽行为
1 | // 保存拖拽开始时地图的中心点 |
- 采集点击站点行为:在marker的点击监听中添加如下代码:
1 | // 采集用户点击站点的数据 |
10.开发业务层
在src/main/java下新建cn.tedu.nybike.service
包。
在该包下新建OperationService
类,并在类中开发对应的业务层方法。
1 | package cn.tedu.nybiket.service; |
11.开发业务层测试用例
光标选中OperationService
类中任意位置,右键 ->Generate… -> Test… ,在里面勾选saveOpeartion
前面的复选框,然后点OK,自动生成测试类。
1 |
|
12.开发控制器层
在src/main/java下新建cn.tedu.nybike.controller
包。
在该包下新建OperationController
类,并在类中开发对应的控制器层方法。
1 |
|
13.测试控制器层
通过项目主类NybikeApplication
的main方法启动项目。
在浏览器地址栏访问http://localhost:8080/opt/save?optType=1&stationId=1234
,如果页面显示如下信息,说明访问成功。

常见问题:
如果显示连接被拒绝,或无法连接:项目没有正常启动
如果显示连接异常,状态码为404:请求的路径和控制器层提供的路径不对应,检查
OperationController
中两个@RequestMapping
注解的值是否正确如果显示连接异常,状态码为500:服务器执行程序时出现异常,在IDEA的控制台中会有具体的报错信息,根据报错信息排查对应的问题
如果提交了请求参数,但是查询数据库时发现对应的参数值没有被写进数据库:一般是提交参数的参数名和实体类中的属性名不一致导致的,核对参数名和属性名
注:对服务器代码进行修改后,需要重启项目,新的代码才会生效
前端向后台发送数据
在nymap.html中添加如下代码:
- 采集缩放行为
1 | // 用于记录缩放开始级别的变量 |
- 采集拖拽行为
1 | // 保存拖拽开始时地图的中心点 |
- 采集点击站点行为:在marker的点击监听中添加如下代码:
1 | // 采集用户点击站点的数据 |
11.学习可视化插件echarts有自己学习文档
12.数据可视化
从服务器动态获取图表的数据

浏览器与服务器在进行数据交互时,目前比较流行的格式有两种:
- 针对简单数据:
key1=value1&key2=value2&key3=value3....
- 针对复杂数据:JSON
用例组件设计:

开发实体类cn.tedu.nybike.entity.PieItem
:
1 | public class PieItem { |
声明实体类cn.tedu.nybike.entity.OptTypeCountDO
:
1 | public class OptTypeCountDO { |
在cn.tedu.nybike.dao.OperationDAO
中添加新的抽象方法:
1 | /** |
在src/main/resources/mappers/OperationMapper.xml
中添加绑定的SQL语句:
1 | <!--查询各类操作的总数量--> |
在OperationDAOTest
中添加测试方法,对持久层方法进行测试:
1 |
|
在OperationService
中添加新的方法:
1 | public List<PieItem> findOptTypeCount(){ |
修改OperationController
中的方法,通过调用业务层方法获取数据:
1 |
|
通过NybikeApplication
启动项目,通过浏览器访问http://localhost:8080/demo/opt_type_count.html
,查看饼图数据是否更新成数据库中的数据:
