业务描述

需求描述

任何一家企业都会涉及到员工的增删改查,在当前业务系统设计中我们需要对员工信息的管理进行设计和实现。

业务框架分析

在员工(Staff)信息管理中就是要实现对员工信息的添加,修改,查询,删除等业务,如图所示:
image

项目技术架构分析及设计

在员工管理模块实现过程,我们采用典型的C/S架构进行实现,客户端我们基于浏览器进行实现,服务器采用tomcat,数据库使用MySQL,具体应用层基于MVC分层架构进行实现。

项目技术栈应用分析及选型

客户端技术:html,css,javascript,bootstrap
服务端技术:hikaricp,mybatis,spring,springboot,thymeleaf
数据库技术:mysql,sql

数据库及表的分析与设计

数据库初始化

打开mysql控制台,然后按如下步骤执行staff.sql文件。
第一步:登录mysql(注:服务器密码要用设置的密码)

mysql –uroot –p*****

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

set names utf8;

第三步:执行staff.sql文件(切记不要打开文件复制到mysql客户端运行,不然会出现乱码问题)。

source d:/staff.sql

第四步:脚本执行成功以后,在客户端查询数据之前,先执行如下语句:

set names gbk;

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

设计并创建数据库

假如数据库已存在,则先删除数据库,代码如下:

drop database if exists dbstaff;

创建新的数据库,代码如下:

create database dbstaff default character set utf8;

设计并创建员工(Staff)表

打开数据库,语句如下:

use dbstaff;

在dbstaff数据库中创建员工表:

create table tb_staff(
     id bigint primary key auto_increment,
     name varchar(100) not null,
     gender varchar(10) not null,
     workingTime datetime not null
)engine=InnoDB;
insert into tb_staff values (null,'A','man',now());
insert into tb_staff values (null,'B','woman',now());
insert into tb_staff values (null,'C','woman',now());
insert into tb_staff values (null,'D','woman',now());
insert into tb_staff values (null,'E','man',now());
insert into tb_staff values (null,'F','man',now());
insert into tb_staff values (null,'G','woman',now()); 

项目环境初始化

准备操作

1)JDK 1.8
2)Maven 3.6.3
3)IDEA 2020.2
4)MySQL 5.7+

创建项目Module

打开idea,然后基于设计,创建项目module,如图所示:
image
创建项目module时指定项目核心依赖
image

添加项目Module依赖

MySQL 驱动

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <scope>runtime</scope>
</dependency>

Srping Jdbc 提供了HikariCP连接池

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

MyBatis 资源

<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>2.1.3</version>
</dependency>

Spring Web 依赖 (内置一个tomcat服务)

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Thymeleaf 依赖 (html模板引擎)

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

项目Module基础配置

打开项目Module配置文件application.properties,并添加如下内容(注:服务器密码password要用设置的密码):

#spring server
server.port=80
# spring datasource
spring.datasource.url=jdbc:mysql:///dbstaff?serverTimezone=GMT%2B8&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=*****
# spring mybatis
mybatis.mapper-locations=classpath:/mapper/*/*.xml
# spring log
logging.level.com.cy=debug
#spring thymeleaf
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

员工数据的查询及呈现

业务描述

将数据库中的员工信息查询出来,然后在客户端基于html技术进行呈现。

领域对象(POJO)设计及实现

设置Staff对象,基于此对象封装从数据库查询到的员工信息,代码如下:

package com.cy.pj.staff.pojo;
import java.util.Date;
public class Staff {
    private Integer id;
    private String name;
    private String gender;
    private Date workingTime;
    @Override
 public String toString() {
        return "Staff{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", gender='" + gender + ''' +
                ", workingTime=" + workingTime +
                '}';
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public Date getWorkingTime() {
        return workingTime;
    }
    public void setWorkingTime(Date workingTime) {
        this.workingTime = workingTime;
    }
}

数据逻辑对象(DAO)查询方法设计及实现

设计用于访问Staff数据的数据访问对象及方法,其关键步骤如下:

第一步:定义StaffDao接口,代码如下:

package com.cy.pj.staff.dao;
@Mapper
public interface StaffDao{

}

第二步:在StaffDao中定义品牌查询方法,代码如下:

List<Staff> findStaffs(String name);

第三步:基于查询方法定义SQL映射.
在resources目录中创建mapper/staff目录,并在目录中添加StaffMapper.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="com.cy.pj.staff.dao.StaffDao">
    <select id="findStaffs" resultType="com.cy.pj.staff.pojo.Staff">
        select id,name,gender,workingTime
        from tb_staff
        <if test="name!=null and name!=''">
            where name like concat("%",#{name},"%")
        </if>
    </select>
</mapper>

其中:concat为mysql中提供的字符串连接函数.

第四步:对数据层的查询方法进行单元测试,代码如下:

package com.cy.staff.dao;
import com.cy.pj.staff.dao.StaffDao;
import com.cy.pj.staff.pojo.Staff;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class StaffDaoTest {
    @Autowired
 private StaffDao staffDao;
    @Test
 void testFindStaffs(){
        List<Staff> list = staffDao.findStaffs("C");
        for (Staff s:list){
            System.out.println(s);
        }
    }
}

业务逻辑对象(Service)查询方法设计及实现

业务逻辑对象负责模块的具体业务处理,例如参数校验,事务控制,权限控制,日志记录等.
第一步:定义业务接口

package com.cy.pj.staff.service;
import com.cy.pj.staff.pojo.Staff;
import java.util.List;
public interface StaffService {
    
}

第二步:在StaffService接口中添加品牌查询方法

List<Staff>findStaffs(String name);

第三步:定义StaffService接口实现类StaffServiceImpl.

package com.cy.pj.staff.service.impl;
import com.cy.pj.staff.dao.StaffDao;
import com.cy.pj.staff.pojo.Staff;
import com.cy.pj.staff.service.StaffService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class StaffServiceImpl implements StaffService {
    private static final Logger log= LoggerFactory.getLogger(StaffServiceImpl.class);
    @Autowired
 private StaffDao staffDao;
    public List<Staff> findStaffs(String name) {
        long t1 = System.currentTimeMillis();
        List<Staff> list = staffDao.findStaffs(name);
        long t2 = System.currentTimeMillis();
        log.info("findStaffs->time->{}",(t2-t1));
        return list;
    }
}

第四步:定义StaffService接口方法的单元测试类,并业务进行测试分析

package com.cy.staff.service;
import com.cy.pj.staff.pojo.Staff;
import com.cy.pj.staff.service.StaffService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class StaffServiceTests {
    @Autowired
 private StaffService staffService;
    @Test
 void testFindStaffs(){
        List<Staff> list = staffService.findStaffs("");
        for (Staff s:list){
            System.out.println(s);
        }
    }
}

控制逻辑对象(Controller)查询方法设计及实现

在控制逻辑对象中主要是负责请求和响应逻辑控制,例如请求url映射、参数映射、请求方式、结果集的封装、解析、响应的设计等。
第一步:定义Controller类


詅®燃
1 声望0 粉丝

« 上一篇
基础点收集