SpringBoot工程下活动(Activity)模块设计及实现

业务描述

基于Spring,MyBatis,SpringBoot,Thymeleaf,Ajax技术实现活动模块的查询,添加等操作。

项目环境初始化

准备工作

1. MySQL(5.7)
2. JDK (1.8)
3. Maven (3.6.3)
4. STS(4.7.1)

数据库初始化

打开mysql控制台,然后按如下步骤执行goods.sql文件。
第一步:登录mysql。

mysql –uroot –proot

第二步:设置控制台编码方式。

set names utf8;

第三步:执行activity.sql文件(切记不要打开文件复制到mysql客户端运行)。

source d:/activity.sql

其中activity.sql文件内容如下:

drop database if exists dbactivity;
create database dbactivity default character set utf8;
use dbactivity;
create table tb_activity(
     id bigint primary key auto_increment,
     title varchar(100) not null,
     category varchar(100) not null,
     startTime datetime not null,
     endTime datetime not null,
     remark text,
     state tinyint,
     createdTime datetime not null,
     createdUser varchar(100)
)engine=InnoDB;
insert into tb_activity values (null,'ABS','cuoxiao','2020-02-02 15:00:00','2020-02-03 15:00:00','...',1,now(),'xiaoli');
insert into tb_activity values (null,'VALIDATE','cuoxiao','2020-02-02 15:00:00','2020-02-03 15:00:00','...',1,now(),'xiaoli');
insert into tb_activity values (null,'VALIDATE','cuoxiao','2020-02-02 15:00:00','2020-02-03 15:00:00','...',1,now(),'xiaoli');
insert into tb_activity values (null,'ABS','cuoxiao','2020-02-02 15:00:00','2020-02-03 15:00:00','...',1,now(),'xiaoli');
insert into tb_activity values (null,'ACCESS','cuoxiao','2020-02-02 15:00:00','2020-02-03 15:00:00','...',1,now(),'xiaoli');

创建项目并添加依赖

第一步:基于start.spring.io 创建项目并设置基本信息。

第二步:创建项目时指定项目核心依赖。

第三步:项目创建以后分析其结构。

项目配置文件内容初始化

#server
server.port=80
#server.servlet.context-path=/
#spring datasource
spring.datasource.url=jdbc:mysql:///dbactivity?serverTimezone=GMT%2B8&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

#spring mybatis
mybatis.mapper-locations=classpath:/mapper/*/*.xml

#spring logging
logging.level.com.cy=debug

#spring thymeleaf
spring.thymeleaf.prefix=classpath:/templates/modules/
spring.thymeleaf.suffix=.html
spring.thymeleaf.cache=false

项目API架构设计

其API架构设计,如图所示:

活动模块查询业务实现

业务描述

从数据库查询所有活动(Activity)信息,然后呈现在页面上(基于JS方式进行呈现)

业务时序分析

在浏览器地址栏输入查询活动信息的url获取活动信息,其时序过程如图所示:

Dao接口方法及映射定义

定义活动模块数据层接口及查询方法,代码如下:

package com.cy.pj.activity.dao;
import com.cy.pj.activity.pojo.Activity;

@Mapper
public interface ActivityDao {
    
     @Select("select * from tb_activity order by createdTime desc")
     List findActivitys();
}

Service接口方法定义及实现

定义service接口以及获取活动信息的方法,代码如下:

package com.cy.pj.activity.service;
import java.util.List;
import com.cy.pj.activity.pojo.Activity;
//引入包中的类:ctrl+shift+o

public interface ActivityService {
    List findActivitys();
}

定义service接口实现类,并重写接口方法,代码如下:

package com.cy.pj.activity.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.cy.pj.activity.dao.ActivityDao;
import com.cy.pj.activity.pojo.Activity;
import com.cy.pj.activity.service.ActivityService;

@Service
public class ActivityServiceImpl implements ActivityService {
    @Autowired
    private ActivityDao activityDao;
    @Override
    public List findActivitys() {
         return  activityDao.findActivitys();
    }
}

Controller方法定义及实现

package com.cy.pj.activity.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.cy.pj.activity.pojo.Activity;
import com.cy.pj.activity.service.ActivityService;

@Controller
public class ActivityController {
     @Autowired
     private ActivityService activityService;
     
     @RequestMapping("doActivityUI")
     public String doActivityUI(){
          return "activity";
     }
     
     /**查询所有活动信息*/
     @RequestMapping("/activity/doFindActivitys")
     public List doFindActivitys() {
         List  list=activityService.findActivitys();
         return list;
     }
}

Activity 列表页面设计及实现

本次页面样式基于bootstrap(一个前端框架,官网为bootcss.com)进行实现,首先在项目工程中添加静态资源,如图所示:


设计activity.html页面,引入bootstrap,jquery等相关资源,如图所示:

在activity.html页面中添加呈现Activity数据的html元素:

title Category StartTime EndTime State Operation
数据正在加载中.......

基于Ajax异步加载服务端活动数据并进行局部刷新

启动tomcat服务器进行访问测试分析

  • 数据库链接的url配置错误,如图所示:

  • 空指针异常,如图所示:

项目启动及运行过程中的BUG分析

活动模块添加业务实现

业务描述

在活动列表页面,设计添加按钮,点击添加按钮时弹出模态框,在模态框中呈现活动添加表单元素,其添加表单原型设计,
如图所示:

业务时序分析

活动添加业务,其时序分析,如图所示:

Dao接口方法及映射定义

在ActivityDao接口中添加持久化活动信息的方法,代码如下:

int insertObject(Activity activity);

在ActivityMapper映射文件中添加映射元素,代码如下:

 
          insert into tb_activity
          (title,category,startTime,endTime,remark,state,createdUser,createdTime) 
          values    
          (#{title},#{category},#{startTime},#{endTime},
          #{remark},#{state},#{createdUser},now())
 

相关属性的应用说明,如图所示:

当活动创建好以后,假如到了结束时间,动态更新活动的状态,代码如下:

@Update("update tb_activity set state=0 where id=#{id}")
int updateState(Long id);

Service接口方法定义及实现

在ActivityService接口中,添加保存活动信息的方法,代码如下:

int saveActivity(Activity entity);

在ActivityServiceImpl实现类中添加,接口方法的实现,代码如下:

@Override
public int saveActivity(Activity entity) {
        int rows=activityDao.insertObject(entity);
        Timer timer=new Timer();
         //此对象可以负责去执行一些任务(这个对象内置一个线程和一个任务队列)
         //启动线程执行任务调度
        timer.schedule(new TimerTask() {//TimerTask为任务
            @Override
            public void run() {
                //一旦调用此任务的线程获得了CPU就会执行这个任务的run方法
                activityDao.updateState(entity.getId());
                timer.cancel();//退出任务调度(后续线程也会销毁)
            }
        }, entity.getEndTime());//按指定时间执行任务.
        return rows;
}

Controller方法定义及实现

在ActivityController中添加,处理添加请求的方法,代码如下:

@RequestMapping("/activity/doSaveActivity")
public String doSaveActivity(Activity activity) {
 activityService.saveActivity(activity);
 return "redirect:/activity/doFindActivitys";
}

Activity 页面添加表单设计及实现

在activity.html页面中添加表单元素,用于实现与用户交互,首先在activity页面上添加一个添加按钮,代码如下:

在指定位置添加模态框(可参考bootcss.com),代码如下:

在模态框”modal-body”位置,添加form表单,代码如下:

添加JS代码,处理模态框Save按钮事件,代码如下:

    

启动tomcat服务器进行访问测试分析

启动tomcat ,访问活动列表页面,如图所示:

在活动列表页面,点击添加按钮,然后启动活动添加模块框,执行添加操作如图所示:

项目启动及运行过程中的BUG分析

  • JS 语法问题,如图所示:

总结(Summary)

本模块中讲解了活动模块中类的设计,映射设计,交互设计以及实现,然后可以基于此模块的练习加强对业务和技术上的设计及是实现。

你可能感兴趣的:(bootstrap,spring,springboot)