#***服务端开发代码 ##项目结构 父工程hhzgw-news,定义jar包版本依赖,统一管理子工程 hhzgw-news |- news-common, 公共依赖包,基础业务包,包括持久层代码和utils |- news-service-admin, 管理端管理后台业务代码,包括service,controller |- news-service-user, 用户端管理后台业务代码,包括service,controller ##技术栈 基础开发框架:springboot 2.3.3 持久层开发框架:mybatis+tkMapper+pageHelper, 使用tkmapper时,主键需要添加javax.persistence.Id,@GeneratedValue(generator = "JDBC"),并且数据类型使用包装类 缓存:redis 数据库:mysql 8.0.21 存储:阿里云OSS json格式化工具:fastjson 1.2.74 接口文档:swagger 2.9.3 token校验方式:jwt 0.9.1 类型转换工具:基于BeanUtils的converter 工具类:hutools 5.5.4 ##请求与响应 登录验证采用jwt,登录成功后将返回的token值放入header中请求后续接口,key="Authorization" token超时需重新登录,超时时间待定义 目前A端采用手机号密码登录,B端采用手机号验证码登录 接口请求采用restful风格: 新增数据:POST 参数格式:json 修改数据:PUT 参数格式:json 查询数据:GET 参数格式:url拼接 删除数据:DELETE 参数格式:url拼接 响应数据JSON格式: { "code": 200, "msg": "参数有误", "data": {"foo":"1","bar":"2"} } ##日志级别 测试环境:debug 开发环境:info 生产环境:warning或info ##开发要求 ###一:实体类 采用lombok注解,减少重复代码 ####1.entity中的POJO 用途:持久层和数据库对应 命名方式:Xxx 位置:com.hhzgw.news.common.business.entity ####2.DTO是数据封装类 用途:在service和dao之间传递 命名方式:XxxDTO 位置:com.hhzgw.news.common.business.dto ####3.BO是数据封装类 用途:在前端到接口之间传递 命名方式:XxxBO 位置:com.hhzgw.news.service.*.api.*.bo ####4.VO是数据封装类最终给web返回的数据 用途:在接口到前端之间传递 命名方式:XxxVO 位置:com.hhzgw.news.service.*.api.*.vo ###二:集合使用 使用hashmap时,不超过12不用指定初始化容器大小,超过12以后一定要指定容器大小 hashmap使用entrySet遍历,jdk8可以使用Map.foreach 不要在foreach里进行add/remove操作,remove元素使用iterator,并发操作对iterator加锁 谨慎使用stream,繁杂逻辑不使用stream,以防降低可读性 ###三:Redis存储规则 幂等性:使用hash,key:idempotence_,field:业务_,value:token token存储:string,prefix:webuser_,key:token,value:userinfo 手机号存储:hash,key:webcurrent_,field:mobile。value:token ###四:建表规范 1.数据库字符集使用utf8,排序规则使用utf8_general_ci 2.表名,字段名必需英文字母小写,单词减下划线分隔 3.每张表都必须有id(自增bigint,作为主键),create_time(timestamp类型),可选update_time(timestamp类型) 4.表关联时使用外键,不得使用主键冗余,外键**_id必须同为bigint类型 5.小数类型使用decimal,禁止使用float,double损失精度 6.存储的字符串长度固定时,使用char定长 7.字符串按需分配存储空间,长度小于5000使用varchar,长度小于50000使用text,长度大于50000使用mediumtext,谨慎使用longtext 8.尽量不使用冗余字段,如有必要,不能是频繁修改的字段,不能是varchar超长字段,更不能是text 9.对大表高频查询条件创建索引,索引方法使用B树,联合索引字段不得超过5个 10.单表行数超过500w行,或者表单容量超过2g,才进行分库分表 ###五:SQL规范 1.查询数量使用count(*),优化器会自动选择最窄索引,减少在整个表上使用count(*) ,它可能会将整个表锁住 2.使用ISNULL()来判断是否为null值 3.分页查询逻辑,count=0时直接返回,避免执行后面的分页 4.数据删除或修改要先select,再根据主键进行操作,避免过量操作 5.尽量避免in操作,避免不了要控制在1000个以内 6.在开发中不允许使用truncate 7.select查询时,无论字段多少,只查询需要的属性,不允许查询* 8.配置参数使用#{}, 不允许使用${} 9.执行update操作时,不要更新无改动的字段 10.@Transactional事务不要滥用,回滚需要考虑缓存,搜索引擎,消息补偿,统计 ##进度 1、需求分析、业务流程梳理 2、技术框架搭建 3、方案设计 4、详细设计 5、模块拆分 6、编码 7、测试 8、上线
java后台服务文档
最新推荐文章于 2022-09-23 13:47:06 发布