Spring Boot基础学习笔记:可视化迎新
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot基础学习笔记:可视化迎新相关的知识,希望对你有一定的参考价值。
文章目录
一、项目需求
- 可视化男女生人数比例
- 可视化报到未报到人数比例
- 可视化各学院学生人数比例
- 可视化各学院男女生人数比例
- 可视化生源地比例
二、实现步骤
(一)安装插件
1、Lombok插件
2、MyBatisX插件
(二)准备数据库
1、下载数据库脚本 - lzy_student.sql
2、创建数据库 - lzy_student
3、运行数据库脚本
4、查看数据表记录
(三)创建Spring Boot项目 - WelcomeFreshmenECharts
- 在pom.xml文件里添加Lombok与Druid依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.weicoder</groupId>
<artifactId>druid</artifactId>
<version>3.3.8</version>
</dependency>
(四)创建实体类
- 为了更好地解决问题,将实体类分为两种:一种是针对数据库的实体类,实体属性与表字段完全一一对应;一种是针对业务需求的实体类,除了与表字段对应的实体属性,还可以根据业务需求添加新属性,甚至没有与表字段对应的属性,全部是根据业务需求设置的实体属性。
1、针对数据库的实体类
(1)创建学生实体类 - Student
- 在net.hw.echarts包里创建bean子包,在子包里创建Student类
package net.hw.echarts.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 功能:学生实体类
* 作者:华卫
* 日期:2021年06月09日
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student implements Serializable {
private Integer id; // 学号
private String name; // 姓名
private String gender; // 性别
private Integer age; // 年龄
private String school; // 所属学院
private String sign; // 报道情况
private String province; // 生源省份
private String major; // 就读专业
}
@Data
、@AllArgsConstructor
与@NoArgsConstructor
是Lombok注解,用于生成getters、setters、全参构造方法和无参构造方法- 为了提高性数据访问性能,在映射器配置文件里要采用二级缓存,要求实体类必须序列化,因此要实现Serializable接口
2、创建针对业务需求的实体类
(1)创建学生业务实体类 - StudentBiz
- 在net.hw.echarts包里创建biz子包,在子包里创建StudentBiz类
package net.hw.echarts.biz;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 功能:学生业务实体类
* 作者:华卫
* 日期:2021年06月09日
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentBiz implements Serializable {
private Integer id; // 学号
private String name; // 姓名
private String gender; // 性别
private Integer age; // 年龄
private String school; // 所属学院
private String sign; // 报道情况
private String province; // 生源省份
private String userCollegeMajor; // 就读专业
private Integer count; // 人数
}
- 大家可以看到,学生业务实体类
StudentBiz
只是比学生实体类Student
多了一个count
属性,用于存放学生人数
(2)创建数据业务实体类 - DataBiz
- 后台控制返回给前台的JSON数据,格式:
{msg: "获取成功", status: "200", data: [{name: "男", value: 300}, {name: "女", value: 240}]}
- 在net.hw.echarts.biz包里创建DataBiz类
package net.hw.echarts.biz;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* 功能:数据业务实体类
* 作者:华卫
* 日期:2021年06月09日
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DataBiz implements Serializable {
private String msg; // 消息
private Integer status; // 状态码
private List data; // 数据
}
(3)创建映射业务实体类 - MapBiz
- 查看ECharts饼图数据源格式,列表里每个map有两个键:name与value
- 在net.hw.echarts.biz包里创建MapBiz类
package net.hw.echarts.biz;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 功能:映射业务实体类
* 作者:华卫
* 日期:2021年06月09日
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MapBiz implements Serializable {
private String name;
private Integer value;
}
(五)创建学生映射器接口
- 在net.hw.echarts包里创建mapper子包,在子包里创建StudentMapper接口
package net.hw.echarts.mapper;
import net.hw.echarts.bean.Student;
import net.hw.echarts.biz.StudentBiz;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 功能:学生映射器接口
* 作者:华卫
* 日期:2021年06月09日
*/
@Mapper
public interface StudentMapper {
// 插入学生记录
int insert(Student student);
// 按学号删除学生记录
int deleteById(Integer id);
// 更新学生记录
int update(Student student);
// 按学号查询学生记录
Student findById(Integer id);
// 查询全部学生记录
List<Student> findAll();
// 按性别查询学生人数
List<StudentBiz> findByGender();
// 按学院性别查询人数
List<StudentBiz> findBySchoolGender();
// 按报到与否查询人数
List<StudentBiz> findBySign();
// 按学院查询报到人数
List<StudentBiz> findBySchoolSign();
// 按生源地查询人数
List<StudentBiz> findByProvince();
}
(六)配置应用属性文件 - application.properties
- 将
application.properties
重命名为application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/lzy_student?useUnicode=true&characterEncoding=UTF-8
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
mybatis:
# 标注待解析的mapper的xml文件位置
mapper-locations: classpath:mapper/*.xml
# 标注实体类位置
type-aliases-package: net.hw.echarts.bean
configuration:
# 开启MyBatis驼峰式命名规则自动转换 (本案例表字段与实体属性一致,可以不开启)
map-underscore-to-camel-case: true
(七)创建学生映射器配置文件 - StudentMapper.xml
- 在resources目录里创建mapper子目录,然后在子目录里创建StudentMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.hw.echarts.mapper.StudentMapper">
<!--采用缓存,要求实体类序列化-->
<cache></cache>
<!--学生表全部列-->
<sql id="columns">
id, name, gender, age, school, sign, province, major
</sql>
<!--按学号查询学生-->
<select id="findById" parameterType="java.lang.Integer" resultType="Student">
select
<include refid="columns"/>
from student
where id = #{id};
</select>
<!--查询全部学生-->
<select id="findAll" resultType="student">
select
<include refid="columns"/>
from student;
</select>
<!--按性别查询学生人数-->
<select id="findByGender" resultType="net.hw.echarts.biz.StudentBiz">
select gender, count(*) as count from student group by gender;
</select>
<!--按学院性别查询学生人数-->
<select id="findBySchoolGender" resultType="net.hw.echarts.biz.StudentBiz">
select school, gender, count(*) as count from student group by school, gender;
</select>
<!--按报到与否查询学生-->
<select id="findBySign" resultType="net.hw.echarts.biz.StudentBiz">
select sign, count(*) as count from student group by sign;
</select>
<!--按学院查询报到人数-->
<select id="findBySchoolSign" resultType="net.hw.echarts.biz.StudentBiz">
select school, sign, count(*) as count from student group by school, sign;
</select>
<!--按生源地查询学生-->
<select id="findByProvince" resultType="net.hw.echarts.biz.StudentBiz">
select province, count(*) as count from student group by province;
</select>
<!--插入学生记录-->
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="student"
useGeneratedKeys="true">
insert into student (name, gender, age, school, sign, province, major)
values (#{name}, #{gender}, #{age}, #{school}, #{sign}, #{province}, #{major});
</insert>
<!--删除学生记录-->
<delete id="deleteById" parameterType="java.lang.Integer">
delete from student where id = #{id};
</delete>
<!--更新学生记录-->
<update id="update" parameterType="Student">
update student
<set>
<if test="name != null">
name = #{name},
</if>
<if test="gender != null">
gender = #{gender},
</if>
<if test="age != null">
age = #{age},
</if>
<if test="school != null">
school = #{school},
</if>
<if test="sign != null">
sign = #{sign},
</if>
<if test="province != null">
province = #{province},
</if>
<if test="major != null">
major = #{major},
</if>
</set>
where id = #{id};
</update>
</mapper>
(八)创建学生服务类 - StudentService
- 在net.hw.echarts包里创建service子包,在子包里创建StudentService类
package net.hw.echarts.service;
import net.hw.echarts.bean.Student;
import net.hw.echarts.biz.StudentBiz;
import net.hw.echarts.mapper.StudentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 功能:学生服务类
* 作者:华卫
* 日期:2021年06月09日
*/
@Service
public class StudentService {
@Autowired(required = false)
private StudentMapper studentMapper;
public int insert(Student student) {
return studentMapper.insert(student);
}
public int deleteById(Integer id) {
return studentMapper.deleteById(id);
}
public int update(Student student) {
return studentMapper.update(student);
}
public Student findById(Integer id) {
return studentMapper.findById(id);
}
public List<Student> findAll() {
return studentMapper.findAll();
}
public List<StudentBiz> findByGender() {
return studentMapper.findByGender();
}
public List<StudentBiz> findBySchoolGender() {
return studentMapper.findBySchoolGender();
}
public List<StudentBiz> findBySign() {
return studentMapper.findBySign();
}
public List<StudentBiz> findBySchoolSign() {
return studentMapper.findBySchoolSign();
}
public List<StudentBiz> findByProvince() {
return studentMapper.findByProvince();
}
}
(九)添加脚本静态资源
1、下载脚本资源
(1)china.js
(2)echarts.min.js
(3)jquery.min.js
2、将脚本资源放到static目录
(十)创建控制器
1、创建数据控制器 - DataController
(1)按性别获取学生人数信息
- 创建getByGender()方法
package net.hw.echarts.controller;
import net.hw.echarts.biz.DataBiz;
import net.hw.echarts.biz.MapBiz;
import net.hw.echarts.biz.StudentBiz;
import net.hw.echarts.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* 功能:数据控制器
* 作者:华卫
* 日期:2021年06月09日
*/
@RestController
@RequestMapping("/data")
public class DataController {
@Autowired(required = false)
private StudentService studentService;
@RequestMapping(value = "/getByGender",<以上是关于Spring Boot基础学习笔记:可视化迎新的主要内容,如果未能解决你的问题,请参考以下文章
Java学习笔记:Spring Boot与Spring MVC的区别是什么?
《深入实践Spring Boot》阅读笔记之一:基础应用开发