1.需求分析(准确)、需求挖掘(扩展):对接客户的
2.原型设计(Axure、html、jpg):给客户展示并讨论的
3.项目经理进行任务分配(团队精神)
4.底层架构(项目经理)、项目研发(团队正式写代码)
5.上传到测试环境下(测试环境和生产环境一样,会有测试人员对代码进行单元黑盒白盒···测试,写好自己的程序说明书给测试人员)
6.部署项目到云端生产环境下(项目正式结束,客户开始使用)
二、项目实战 1.数据库的搭建新建一个系统用户表(记得写注释)
2.mapper里新建一个xml右键mapper-》copy qualified name(复制路径加名)-》粘贴到如图红框
加一个.
右键xml自己-》copy(复制名称)-》粘贴到.后面
去掉后缀名.xml
3.model里新建一个实体类select id,loginname,password,username,age,sex,tel,email,wxnum,pic from sys_user_info
model-》new -》class-》名字是刚刚xml去掉Mapper
里面写所有表中的所有属性,和自动生成getset方法和重写
package com.demo.model;
public class SysUsersInfo {
private String id;
private String loginname;
private String password;
private String username;
private String age;
private String sex;
private String tel;
private String email;
private String wxnum;
private String pic;
public SysUsersInfo(String id, String loginname, String password, String username, String age, String sex,
String tel, String email, String wxnum, String pic) {
super();
this.id = id;
this.loginname = loginname;
this.password = password;
this.username = username;
this.age = age;
this.sex = sex;
this.tel = tel;
this.email = email;
this.wxnum = wxnum;
this.pic = pic;
}
public SysUsersInfo() {
super();
// TODO Auto-generated constructor stub
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getLoginname() {
return loginname;
}
public void setLoginname(String loginname) {
this.loginname = loginname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getWxnum() {
return wxnum;
}
public void setWxnum(String wxnum) {
this.wxnum = wxnum;
}
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic;
}
}
4.mapper里新建一个接口
mapper-》new -》interface-》名字和刚刚xml同名
package com.demo.mapper;
import java.util.List;
import com.demo.model.SysUsersInfo;
public interface SysUsersInfoMapper {
//实现xml里的方法
public List findAll();
}
5.写service
service-》new -》interface-》名字是刚刚xml去掉Mapper+Service
里面是mapper里的方法直接复制
package com.demo.service;
import java.util.List;
import com.demo.model.SysUsersInfo;
public interface SysUsersInfoService {
//mapper里的方法直接复制
public List findAll();
}
6.创建实现类
serviceImpl-》new -》class-》名字是刚刚xml去掉Mapper+Service+Impl
继承自SysUsersInfoService
package com.demo.serviceImpl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.demo.mapper.SysUsersInfoMapper;
import com.demo.model.SysUsersInfo;
import com.demo.service.SysUsersInfoService;
//说明这是一个业务类
@Service
public class SysUsersInfoServiceImpl implements SysUsersInfoService{
//注入
@Autowired
//容器-不仅有临时存储还有实例化等功能
private SysUsersInfoMapper mapper;
@Override
public List findAll() {
return mapper.findAll();
}
}
7.写controller
controller-》new -》class-》名字是刚刚xml去掉Mapper+Controller
package com.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.demo.service.SysUsersInfoService;
@Controller
//声明
public class SysUsersInfoController {
@Autowired
//注入和service建立关系
private SysUsersInfoService service;
//映射关系
@RequestMapping(value="sys_user_info_view")
public String sys_user_info_view(){
return "";
}
}
8.创建jsp
先在主页旁边创建一个文件夹
再在文件夹里创建jsp
右键-》new-》other-》jsp
9.测试controller里
package com.demo.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.demo.model.SysUsersInfo;
import com.demo.service.SysUsersInfoService;
@Controller
//声明
public class SysUsersInfoController {
@Autowired
//注入和service建立关系
private SysUsersInfoService service;
//映射关系
@RequestMapping(value="sys_user_info_view")
public String sys_user_info_view(HttpServletRequest request){//request方法
List list = service.findAll();
request.setAttribute("list", list);//request方法将list给界面
return "sys_user_info/view";//地址,记得框架里去掉了.jsp
}
}
地址为controller里value里+action
http://localhost:8080/cc_projectDemo1029/sys_user_info_view.action
10.导入html模板步骤:
(1)将jsp里的内容替换成模板的
(2)注意修改css和lib和js等的路径
(3)根据需要删减更改页面内容
(4)引入核心包方便遍历数据库中数据
(5)实现展示功能:
(6)图片地址及连接
三、继续实现添加功能 1.SysUsersInfoMapper.xml里 2.SysUsersInfoMapper.java里 3.SysUsersInfoService.java直接复制 4. SysUsersInfoServiceImpl.java里 5.SysUsersInfoController.java里先写一个跳转 6.处理jsp页面 (1)处理css、js、lib地址 (2)修改页面--验证是否为空required="" lay-verify="loginname"是h5中方法,可写在input里
或者用ajaxautocomplete="off" >
首先在button里写type提交类型为submit
然后在form里οnsubmit="return check_from()"提交表单时先到check_from()方法中
开始写check_from()方法,放在scrip里
(3)修改页面--清除缓存autocomplete="off"(4)修改页面--提交成功lay-filter="add" lay-submit=""可写在增加按钮处autocomplete="off" >
(5)修改页面-form表单提交方式为method="post" (6)SysUsersInfoController里正式写增加方法
首先导入写好的CreateUUID方法随机生成id
package com.demo.common;
import java.util.UUID;
//创建随机ID
public class CreateUUID {
public static String getuuid() {
return UUID.randomUUID().toString().replaceAll("-", "");
}
}
使用方法:
//随机id
String id=CreateUUID.getuuid();
然后使用java中的流来处理图片上传
//流来处理文件上传
//MultipartFile pic接受前端的二进制流
String path=request.getServletContext().getRealPath("/upload");//接受地址
File dir = new File(path);//创建流
dir.mkdirs();//没有对应路径创建文件夹
String srcName=pic.getOriginalFilename();//获取文件名字
File dest = new File(dir,srcName);//dir是指向文件,srcName是上传的文件
//上传
pic.transferTo(dest);//把异常抛出
//文件名字存储到数据库中
s.setPic(srcName);
最后把整个s存储到数据库
//最后把整个s存储到数据库
boolean b=service.add(s);
if(b){
request.setAttribute("msg", "success");
}else{
request.setAttribute("msg", "error");
}
整体controller
package com.demo.controller;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import com.demo.common.CreateUUID;
import com.demo.model.SysUsersInfo;
import com.demo.service.SysUsersInfoService;
@Controller
//声明
public class SysUsersInfoController {
@Autowired
//注入和service建立关系
private SysUsersInfoService service;
//映射关系//针对数据库里用户表进行查询
@RequestMapping(value="sys_user_info_view")
public String sys_user_info_view(HttpServletRequest request){//request方法
List list = service.findAll();
request.setAttribute("list", list);//request方法将list给界面
return "sys_user_info/view";//地址,记得框架里去掉了.jsp
}
//预添加界面//针对数据库里用户表进行预创建方法
@RequestMapping(value="sys_user_info_pre_add")
public String sys_user_info_pre_add(HttpServletRequest request){//request方法
return "sys_user_info/add";//地址,记得框架里去掉了.jsp
}
//正式添加的方法,创建数据
@RequestMapping(value="sys_user_info_add")
public String sys_user_info_add(HttpServletRequest request,SysUsersInfo s,MultipartFile pic) throws IllegalStateException, IOException{//request方法
//随机id
String id=CreateUUID.getuuid();
s.setId(id);
//流来处理文件上传
//MultipartFile pic接受前端的二进制流
String path=request.getServletContext().getRealPath("/upload");//接受地址
File dir = new File(path);//创建流
dir.mkdirs();//没有对应路径创建文件夹
String srcName=pic.getOriginalFilename();//获取文件名字
File dest = new File(dir,srcName);//dir是指向文件,srcName是上传的文件
//上传
pic.transferTo(dest);//把异常抛出
//文件名字存储到数据库中
s.setPic(srcName);
//最后把整个s存储到数据库
boolean b=service.add(s);
if(b){
request.setAttribute("msg", "success");
}else{
request.setAttribute("msg", "error");
}
return "sys_user_info/add";//地址,记得框架里去掉了.jsp
}
}



