Spring Boot基础学习笔记:可视化迎新

Posted howard2005

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot基础学习笔记:可视化迎新相关的知识,希望对你有一定的参考价值。

文章目录

一、项目需求

在这里插入图片描述

  1. 可视化男女生人数比例
  2. 可视化报到未报到人数比例
  3. 可视化各学院学生人数比例
  4. 可视化各学院男女生人数比例
  5. 可视化生源地比例

二、实现步骤

(一)安装插件

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基础学习笔记:可视化迎新的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot基础学习笔记:可视化数据

Spring boot 学习笔记 - 整合MyBatis

Java学习笔记:Spring Boot与Spring MVC的区别是什么?

《深入实践Spring Boot》阅读笔记之一:基础应用开发

Java框架spring Boot学习笔记:Spring相关概念

spring boot 尚桂谷学习笔记04 ---Web开始