本文是依据过往项目整理出来的项管流程总结。
项目一:
流程上:
参与此项目过程时,项目经理分享给我们的一个 软件开发流程图 :
四个阶段:① 需求阶段;② 开发阶段;③ 系统测试阶段;④ 上线阶段。
四个角色:① 产品团队;② 开发团队;③ 测试团队;④ 运维团队。
具体表现(具体到时间节点上):
规范上:
(1) 阿里规范
遵循阿里巴巴的规范《阿里巴巴Java开发手册1.7.0(嵩山版)》
链接:阿里巴巴Java开发手册1.7.0_嵩山版_.pdf · master · YuBooy / 项目管理流程总结md图片 · GitCode
具体实际使用上:
① 数据库:数据库建表相关:索引、类型、非空
② IDEA 阿里规范插件
(2) swagger注解
此项目使用 Knife4j 工具来完成 swagger 的集成
knife4j是什么:百度安全验证
使用参考:knife4j的使用_快哉此风的博客-CSDN博客_knife4j
knifej 使用步骤:
① 添加依赖:
com.github.xiaoymin knife4j-spring-boot-starter2.0.2
② 创建配置文件:
@Configuration
@EnableSwagger2
@EnableKnife4j
@import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {
@Bean
public Docket api() {
return new Docket(documentationType.SWAGGER_2) // 选择swagger2版本
.apiInfo(apiInfo()) //定义api文档汇总信息
.select()
.apis(RequestHandlerSelectors
.basePackage("com.dave.controller")) // 指定生成api文档的包
.paths(PathSelectors.any()) // 指定所有路径
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("文档标题") // 文档标题
.contact(new Contact("name", "url", "mail")) //联系人信息
.description("描述") //描述
.version("0.1") //文档版本号
.termsOfServiceUrl("http://localhost:8080") //网站地址
.build();
}
}
③ 使用 swagger 注解
④ 通过访问http://localhost:端口号/doc.html 即可见到knife4j的api文档页面页面
(3) @Validated 注解参数校验
为了软件系统的安全,接口参数除了前端要校验,后端也需要校验。通过引入 Validation 实现使用注解完成参数的校验。
常用注解:
| @Validation | 使用在接口参数上,后续注解校验才生效 |
|---|---|
| @NotNull | 检查带注解的值是否不为null |
| @NotEmpty | 检查带注释的元素是否为null或空 |
| @NotBlank | 检查带注解的字符序列是否不为null,且长度是否大于0。与@NotEmpty的区别在于,此约束只能应用于字符串,并且尾部空白被忽略 |
| @Range(min, max) | 检查带注解的值是否介于(包括)指定的最小值和最大值之间 |
| @Pattern(regex, flag) | 检查带注解的字符串是否与正则表达式regex匹配 |
接口参数使用 @Validated ,后面User实体类中的参数才能检验
@ApiOperation(value = "登录", notes = "登录接口")
@ApiImplicitParam(name = "condition", value = "用户登录所需信息", dataType = "User")
@PostMapping("/login")
public CommonResult login(@RequestBody @Validated User condition) {
userService.userLogin(condition);
return CommonResult.success(null,"登录成功");
}
public class User implements Serializable {
@NotEmpty(message = "密码不能为空")
@Pattern(regexp = "^1(3|4|5|7|8)\d{9}$",message = "手机号码格式错误")
@TableField(value = "phone_number")
private String phoneNumber;
@NotEmpty(message = "密码不能为空")
private String password;
}
参考:@Validated注解详解,分组校验,嵌套校验,@Valid和@Validated 区别,Spring Boot @Validated_昌杰的攻城狮之路的博客-CSDN博客_validated
和:Bean Validation具体描述_BrightZhuz的博客-CSDN博客
(4) mybatis plus lamda表达式使用
使用lambdaQuery() 可以调用mybatis plus 中的方法从而可以不用写mapper.xml文件
更重要的是可以通过 方法引用 的方式来使用实体字段名的操作,避免直接写数据库表字段名时无意的错写
示例:
@Override public ListselectByCondition(User condition) { List list = this.lambdaQuery() .eq(ObjectUtil.isNotNull(condition.getId()),User::getId, condition.getId()) .like(StrUtil.isNotBlank(condition.getName()), User::getName, condition.getName()) return list; }
参考1:lambda四种表达形式
mybatis-plus之四种lambda方式_掌握月的博客-CSDN博客_lambdaquerywrapper.select()
一、LambdaQueryWrapper<>
二、QueryWrapper<实体>().lambda()
三、Wrappers.<实体>lambdaQuery()
四、LambdaQueryChainWrapper<实体>(xxxxMapper)
参考2:条件构造器
MyBatis-Plus | 最简单的查询操作教程(Lambda)_10000guo的博客-CSDN博客_mybatisplus查询最大值
参考3:链式查询
MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用_leomoon-CSDN博客_lambdaquerywrapper和querymapper
(5) 工具类的使用:ObjectUtil.isNotEnpty()等
项目中应使用集成的工具类来加速工程的开发,更重要的是使用工具类能规范项目代码,同时减少错误。
public class ObjectUtil {
public static boolean isNull(Object obj) {
//noinspection ConstantConditions
return null == obj || obj.equals(null);
}
}
使用示例:
@Override
public User selectUserById(Long id) {
User user = this.getById(id);
if (ObjectUtil.isNull(user)){
Asserts.fail("查无此用户");
}
return user;
}
public class CollUtil {
public static boolean isNotEmpty(Collection> collection) {
return false == isEmpty(collection);
}
}
使用示例:
@Override
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
public void add(BrowsingHistory browsingHistory) {
//同一用户访问同一个项目,则只存储最新的一个数据
LambdaQueryWrapper eq = new LambdaQueryWrapper()
.eq(BrowsingHistory::getUserId, browsingHistory.getUserId())
.eq(BrowsingHistory::getProjectId, browsingHistory.getProjectId());
List list = baseMapper.selectList(eq);
if (CollUtil.isNotEmpty(list)){
int i = baseMapper.update(browsingHistory,eq);
if (i==0){
Asserts.fail("历史记录更新失败");
}
}else{
int i = baseMapper.insert(browsingHistory);
if (i==0){
Asserts.fail("历史记录存入失败");
}
}
}
Java中常用的16个工具类:java中常用的16个工具类 - ppjj - 博客园
工具上:
代码工具:IDEA + Gitee
接口 API 调试工具:Apifox
Apifox 官网地址:Apifox - API 文档、调试、Mock、测试一体化协作平台 - 接口文档工具,接口自动化测试工具,接口Mock工具,API文档工具,API Mock工具,API自动化测试工具
演示:
项目二: 流程上:
具体在时间节点上的表现:
开发环境:
本地开发环境配置:输入密码 · 语雀
规范工具使用,具体包括以下 3 点:
① GitLab的配置和使用
② IDEA-PULL和PUSH代码
③ IDEA-代码分支管理
工具上:(1) 表设计工具:CHINER[元数建模]
官网地址:CHINER[元数建模]v3.0:最好用的国产开源数据库建模平台 - -龙猫- - OSCHINA - 中文开源技术交流社区">PDMan升级换代至->CHINER[元数建模]v3.0:最好用的国产开源数据库建模平台 - -龙猫- - OSCHINA - 中文开源技术交流社区
其他工具:
(2) 禅道
通用的项目管理软件,用于分派开发任务(进度管控)
官网地址:项目管理软件 开源项目管理软件 免费项目管理软件 - 禅道开源项目管理软件
官网演示:
(3) GitLab
我的理解:私有码厂
官网地址:极狐GitLab官方网站_DevOps平台
(4) Yapi
我的理解:私有服务器上的 ”postman“
官网地址:YApi 接口管理平台
官网展示:
1项目页左侧的 “接口列表” 展示了该项目下的所有接口,右侧默认显示该项目下所有接口的列表。
2点击左侧的某个接口,右侧会出现“预览”、“编辑”和“运行”。
3点击左侧的 “测试集合” 使用测试集功能。
4点击二级导航的“设置”,项目组长即可编辑项目信息和管理成员列表。
5点击二级导航的“动态”,即可查看项目的操作日志。
项管流程、工具外的分享:一个完整的开源的后台管理系统,按需修改即能快速部署一套后台管理系统
后台管理系统开源模板
诺依:RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoYi框架|RuoYi开源|RuoYi视频|若依视频|RuoYi开发文档|若依开发文档|Java开源框架|Java|SpringBoot|SrpingBoot2.0|SrpingCloud|Alibaba|MyBatis|Shiro|OAuth2.0|Thymeleaf|BootStrap|Vue|Element-UI||www.ruoyi.vip
官方演示



