基于SSM框架的员工管理系统

一、视频展示

https://www.bilibili.com/video/BV1xM4y1K71m

二、基本介绍

1、关键技术

开发工具  IntelliJ IDEA
数据库 MySQL 5.7
前端技术 Jquery + Bootstrap + JSP
后台技术 Spring + Spring MVC + MyBatis
日志记录 log4j

2、项目目录结构

项目的整体结构如下: 

具体介绍如下:

(1)程序代码的存放目录——src下的java

controller 负责在页面和程序之间传输数据的,做页面的跳转
dao 负责对数据向数据库增删改查的操作
entity 实体类。一般与数据库中的属性值基本保持一致
service 负责业务模块的应用逻辑设计
utils 工具包。

(2)资源文件的存放目录——resources

mapper 存放Mabtis的映射文件
applicationContext-mybatis.xml Spring整合MyBatis的配置文件
applicationContext-SpringMVC.xml Spring整合Spring MVC的配置文件
jdbc.properties MySQL的配置文件
log4j.properties 日志配置文件

(3)页面文件的存放目录——webapp

bootstrap 存放Boostrap的文件
css 存放页面CSS样式
img 存放图片资源
js 存放js文件
WEB-INF 包括了pages和web.xml。前者用于存放页面,后者则是web项目的配置文件信息
index.jsp 项目启动时的首页

(4)测试类的目录——test

(5)maven的配置文件——pom.xml

3、项目处理流程

扫描二维码关注公众号,回复: 13289120 查看本文章

首先,用户在页面输入数据,由Controller接收数据,并对数据进行封装。之后再调用业务层(service),进行各种业务处理,而业务层收到这个数据之后,会调用DAO层,进行持久化操作。最后,再将查询得到的结果反馈给用户。如下图:

三、技术要点

1、查询结果的分页显示

分页查询是页面展示所必需的。当数据量小的时候,可以在一页展示。但是如果数据库中的数据量达到了成百上千条,若是将数据展示在一页上,则很影响用户体验。因此,就需要做分页查询。在该项目中,实现的分页查询是比较基础的,具体步骤如下:

(1)创建一个Page工具类

/**
 * 分页实体类:存储当前页所有分页相关的数据
 */
public class Page {
    //起始位置
    public int start = 0;
    //每页现实的条数
    public int count = 3;
    //结束位置
    public int last = 0;
    //当前页的页码
    public int currentIndex = 1;
    //总共的页数
    public int totalIndex;
    public int getStart() {
        return start;
    }
    public void setStart(int start) {
        this.start = start;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public int getLast() {
        return last;
    }
    public void setLast(int last) {
        this.last = last;
    }

    public int getCurrentIndex() {
        return currentIndex;
    }

    public void setCurrentIndex(int currentIndex) {
        this.currentIndex = currentIndex;
    }

    public int getTotalIndex() {
        return totalIndex;
    }

    public void setTotalIndex(int totalIndex) {
        this.totalIndex = totalIndex;
    }

    public Page() {
    }

    public void calculateLast(int total) {

        if(0==total%count) {
            last = total-count;
        }else {
            last = total-total%count;
        }
    }

    @Override
    public String toString() {
        return "Page{" +
                "start=" + start +
                ", count=" + count +
                ", last=" + last +
                '}';
    }
}

(2)编写sql语句

sql语句用来查找指定条数的记录,故此需要使用到 limit关键字。如下:

获取数据库表中的记录

    <select id="list" resultType="com.entity.TestEntity">
        select * from t_test
        <if test="start!=null and count!=null">
            limit #{start},#{count}
        </if>
    </select>

获取记录总数 

<select id="total" resultType="int">
        select count(*) from t_test;
    </select>

(3)通过Controller层调用service层,然后调用DAO层执行sql语句,这里直接给出Controller层的方法内容,如下:

@RequestMapping("/getTest")
    public ModelAndView getTest(Page page){
        ModelAndView mav = new ModelAndView();
        //从数据库中获取记录
        List<TestEntity> cs = testDao.list(page);
        //获取记录总数
        int total = testDao.total();
        //计算得到总页数
        int pageIndex = total / page.getCount();
        pageIndex = total % page.getCount() == 0 ? pageIndex : pageIndex+1;
        page.setTotalIndex(pageIndex);
        page.calculateLast(total);
        //将数据返回前端页面
        mav.addObject("testList",cs);
        mav.addObject("page",page);
        mav.addObject("total",total);
        mav.setViewName("test");
        return mav;
    }

2、HttpSession的使用

之所以用到了HttpSession,是因为在页面设计时,将顶部的导航栏提取出来,作为了公共部分。而在登陆之后,有一个欢迎XXX登录。考虑到因为侧边栏的切换而导致的数据在一次请求之后无法再次使用,所以在登录之后,在LoginController中将用户信息放入到了session之中。

四、存在问题

1、未解决Bootstrap的modal传值问题。(如果有小伙伴做过这方面的,希望能指点我一下)

2、如果条件查询时,没有符合条件的,未在前端页面没有做提示功能。

3、缺少对用户信息的JS校验。

4、缺少错误信息提示界面。

五、总结

从整体来讲,大部分功能基本完成,实现了基本的CRUD操作,整体可观,单略有不足,后期我也会慢慢纠正的。在做这个练手项目的时候,刚开始计划3-5天完成,后来因为考试和一些其他事情,搁置了将近半个月。结果第二次开始做的时候,忘了很多的功能点和注意点,反倒出现了掣肘现象。所以大家如果做什么项目,一定要趁热打铁,没时间也要挤时间,做事一定要有连续性,这样间断性的开发会浪费更多的时间。

六、程序代码

https://github.com/MyBestThought/SSM_EMP

猜你喜欢

转载自blog.csdn.net/weixin_47382783/article/details/118673462