为了完成这个项目,需要掌握如下技术:
之前虽然已经使用Servlet+JSP完成了简单的开发,这次使用SSM仅仅是重构工作,但我们仍然按照商业项目的开发步骤来一步一步完成,进一步熟悉这个过程,重复的部分我就直接复制了。
首先要确定要做哪些功能
根据需求,那么只需要一个student表就能够完成功能了。
DROPDATABASEIFEXISTSstudent;CREATEDATABASEstudentDEFAULTCHARACTERSETutf8;创建学生表:student不用学生学号(studentID)作为主键的原因是:不方便操作,例如在更新数据的时候,同时也要更改学号,那这样的操作怎么办呢?所以我们加了一个id用来唯一表示当前数据。CREATETABLEstudent(idint(11)NOTNULLAUTO_INCREMENT,student_idint(11)NOTNULLUNIQUE,namevarchar(255)NOTNULL,ageint(11)NOTNULL,sexvarchar(255)NOTNULL,birthdaydateDEFAULTNULL,PRIMARYKEY(id))ENGINE=InnoDBDEFAULTCHARSET=utf8;MySQL在Windows下不区分大小写,但在Linux下默认区分大小写,因此,数据库名、表明、字段名都不允许出现任何大写字母,避免节外生枝。
就是设计界面,在商业项目中,这是很重要的一步,我们可以解除界面原型,低成本、高效率的与客户达成需求的一致性。
这个项目一共就分为两个页面:
在真正开始编写代码之前,我们首先需要先来搭建好我们的SSM环境。
首先新建工程,选择Maven标签,然后勾选上【Createfromarchetype】选择webapp:
点击下一步,填写上【GroupId】和【ArtifactId】:
然后是确认项目路径,这一步你可以看到Maven配置中的参数,不需要做改动,直接下一步就可以(图中的路径是我配置的本地Maven仓库的地址):
确认项目名称和路径,点击【Finish】即可:
等待一会儿,控制台就会有创建成功的提示信息,我们把【EnableAuto-Import】点上,这个提示会在每次pom.xml有改动时出现,自动导入,省掉麻烦:
下面就是Maven风格的webapp的默认目录结构:
遵循Maven的统一项目结构,我们搭建出项目的完整目录结构如下图:
这里的目录建好之后还需要设置一下,让IDEA识别目录作用,选择【File】>【ProjectStructure】:
设置好之后点击OK,即完成了项目目录的搭建。
实体类仅仅是对数据库中表的一一映射(表中字段名应该和实体类中的名称一一对应),同时可能还需要兼顾对业务能力的支持。
在【cn.wmyskxz.dao】包下创建【StudentDao】接口:
packagecn.wmyskxz.dao;importcn.wmyskxz.entity.Student;importjava.util.List;publicinterfaceStudentDao{ intgetTotal(); voidaddStudent(Studentstudent); voiddeleteStudent(intid); voidupdateStudent(Studentstudent); StudentgetStudent(intid); List
在【cn.wmyskxz.service】包下创建【StudentService】接口:
packagecn.wmyskxz.service;importcn.wmyskxz.entity.Student;importjava.util.List;publicinterfaceStudentService{ /** *获取到Student的总数 *@return */ intgetTotal(); /** *增加一条数据 *@paramstudent */ voidaddStudent(Studentstudent); /** *删除一条数据 *@paramid */ voiddeleteStudent(intid); /** *更新一条数据 *@paramstudent */ voidupdateStudent(Studentstudent); /** *找到一条数据 *@paramid *@return */ StudentgetStudent(intid); /** *列举出从start位置开始的count条数据 *@paramstart *@paramcount *@return */ List
packagecn.wmyskxz.service;importcn.wmyskxz.dao.StudentDao;importcn.wmyskxz.entity.Student;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importjava.util.List;/***StudentService的实现类**@author:@我没有三颗心脏*@create:2018-04-23-下午13:51*/@ServicepublicclassStudentServiceImplimplementsStudentService{ @Autowired StudentDaostudentDao; publicintgetTotal(){ returnstudentDao.getTotal(); } publicvoidaddStudent(Studentstudent){ studentDao.addStudent(student); } publicvoiddeleteStudent(intid){ studentDao.deleteStudent(id); } publicvoidupdateStudent(Studentstudent){ studentDao.updateStudent(student); } publicStudentgetStudent(intid){ returnstudentDao.getStudent(id); } publicList
packagecn.wmyskxz.util;publicclassPage{ intstart; //开始数据 intcount; //每一页的数量 inttotal; //总共的数据量 publicPage(intstart,intcount){ super(); this.start=start; this.count=count; } publicbooleanisHasPreviouse(){ if(start==0) returnfalse; returntrue; } publicbooleanisHasNext(){ if(start==getLast()) returnfalse; returntrue; } publicintgetTotalPage(){ inttotalPage; //假设总数是50,是能够被5整除的,那么就有10页 if(0==total%count) totalPage=total/count; //假设总数是51,不能够被5整除的,那么就有11页 else totalPage=total/count+1; if(0==totalPage) totalPage=1; returntotalPage; } publicintgetLast(){ intlast; //假设总数是50,是能够被5整除的,那么最后一页的开始就是40 if(0==total%count) last=total-count; //假设总数是51,不能够被5整除的,那么最后一页的开始就是50 else last=total-total%count; last=last<00:last; returnlast; }//各种setter和getter}totalPage是计算得来的数,用来表示页码一共的数量在首页显示的StudentList用page的参数来获取:
List
编写分页栏:
1.写好头和尾
3.完成中间页码的编写从0循环到page.totalPage-1,varStatus相当于是循环变量
//获取分页参数intstart=0;intcount=10;try{ start=Integer.parseInt(request.getParameter("page.start")); count=Integer.parseInt(request.getParameter("page.count"));}catch(Exceptione){}....//共享page数据request.setAttribute("page",page);Date转换的问题最开始的时候,我们看到页面上显示的日期是这样的格式:
这显然是我们不希望看到的
重新部署文件,然后刷新页面,就能看到我们希望的效果啦:
项目很简单,仅仅也只是在数据库增删改查的基础上增加了一个界面,我们来动手改一改。
第一个想到的就是删除提示,没有删除提示是很要命的一件事情,如果手滑了一下那可能就悲剧了....
首先我们在顶部的
标签中的