1. 持久层
1.1 规划需要执行的sql语句
INSERT INTO project
(name, type, begin_time, end_time, funds_1, responsible_person,
cooperator_1, cooperator_2, cooperator_3, cooperator_4,
cooperator_5, teacher_1, teacher_2, project_description,
stage, project_data, level, created_time, created_user,
modified_time, modified_user)
VALUE
(#{name}, #{type}, #{beginTime}, #{endTime}, #{funds1},
#{responsiblePerson}, #{cooperator1}, #{cooperator2}, #{cooperator3},
#{cooperator4}, #{cooperator5}, #{teacher1}, #{teacher2},
#{projectDescription}, #{stage}, #{projectData}, #{level},
#{createdTime}, #{createdUser}, #{modifiedTime}, #{modifiedUser})
SELECT * FROM project WHERE responsible_person=#{responsiblePerson}
1.2 设计接口和抽象方法
/**
* 插入新项目对象
* @param project 项目对象
* @return 受影响的行数
*/
Integer insert(Project project);
/**
* 根据负责人id查询项目
* @param responsiblePerson 负责人id
* @return 查询到的项目对象
*/
Project findByResponsiblePerson(String responsiblePerson);
1.3 sql映射
<insert id="insert">
INSERT INTO project
(name, type, begin_time, end_time, funds_1, responsible_person,
cooperator_1, cooperator_2, cooperator_3, cooperator_4,
cooperator_5, teacher_1, teacher_2, project_description,
stage, project_data, level, created_time, created_user,
modified_time, modified_user)
VALUE
(#{name}, #{type}, #{beginTime}, #{endTime}, #{funds1},
#{responsiblePerson}, #{cooperator1}, #{cooperator2}, #{cooperator3},
#{cooperator4}, #{cooperator5}, #{teacher1}, #{teacher2},
#{projectDescription}, #{stage}, #{projectData}, #{level},
#{createdTime}, #{createdUser}, #{modifiedTime}, #{modifiedUser})
</insert>
<resultMap id="ProjectEntityMap" type="com.example.hzuniversity.entity.Project">
<!--将表的资源和类的属性不一致字段进行匹配指定,名称一致可以缩略不写-->
<!--定义映射规则时,主键不可省略-->
<id column="responsible_person" property="responsiblePerson"></id>
<result column="pid" property="pid"></result>
<result column="begin_time" property="beginTime"></result>
<result column="end_time" property="endTime"></result>
<result column="stage" property="stage"></result>
<result column="level" property="level"></result>
<result column="created_time" property="createdTime"></result>
<result column="modified_time" property="modifiedTime"></result>
</resultMap>
<select id="findByResponsiblePerson" resultMap="ProjectEntityMap">
SELECT * FROM project WHERE responsible_person=#{responsiblePerson}
</select>
1.4 单元功能测试
@Test
public void insert() throws ParseException {
Project project = new Project();
project.setName("大创项目管理系统");
project.setBeginTime(new Date());
Date date=new Date();//需要new一个Date对象
String string ="2023-05-22";//输入想要添加的时间
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); //设置日期格式 yyyy-MM-dd-HH-mm-ss这个是完整的
date = dateFormat.parse(string);//将字符串转换成date类型数据
project.setEndTime(date);
Integer rows = projectMapper.insert(project);
System.out.println(rows);
}
@Test
public void findByResponsiblePerson() {
Project project = projectMapper.findByResponsiblePerson("1914080902606");
System.out.println(project);
}
2. 服务层
2.1 规划异常
- 插入异常InsertException(已规划)
- 负责人已对一个项目进行负责,无法再担任当前项目的负责人responsiblePersonException
2.2 设计接口和抽象方法
/**
* 新增项目
* @param project 新增项目对象
* @param username 修改者id
*/
public void addProject(Project project, String username);
@Override
public void addProject(Project project, String username) {
Project result = projectMapper.findByResponsiblePerson(project.getResponsiblePerson());
if (result != null) {
throw new responsiblePersonException("负责人已经负责过一个项目,无法负责此项目");
}
project.setCreatedTime(new Date());
project.setCreatedUser(username);
project.setModifiedTime(new Date());
project.setModifiedUser(username);
Integer rows = projectMapper.insert(project);
if (rows != 1) {
throw new InsertException("插入错误!");
}
}
2.3 单元功能测试
@Test
public void addProject() {
Project project = new Project();
project.setResponsiblePerson("1914080902607");
project.setName("高汕大人");
project.setBeginTime(new Date());
projectService.addProject(project, "管理员");
System.out.println(project);
}
3. 控制层
3.1 异常处理
- 无法再担任当前项目的负责人responsiblePersonException配置在统一异常处理中
else if (e instanceof UpdateEception) {
result.setState(4007);
result.setMessage("负责人已有负责项目");
}
3.2 设计请求
/stu/add_project
POST
Project project
JsonResult< Void >
3.3 实现请求
@RequestMapping("add_project")
public JsonResult<Void> addProject(Project project, HttpSession session) {
String username = getsidFromSession(session);
projectService.addProject(project, username);
return new JsonResult<>(OK);
}