# basic **Repository Path**: cloudscope-cn/basic ## Basic Information - **Project Name**: basic - **Description**: 磐石,基于SpringCloud的研发框架。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 1 - **Created**: 2022-03-02 - **Last Updated**: 2022-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 开发规范 1. 代码缩进一个标准的TAB 2. 鼓励使用PO转VO工具和构造方法,避免代码逻辑陷入在大量getset中 3. 事务注解必须加载Service层的方法名上 4. Controller只能调用一个Service保证业务都处在一个事务中,Service可以复用且支持复用简单的DAO,禁止复用强业务的SQL,避免不需要的肢体冲突。 5. 支持粘贴别人写好的优秀且有效的代码,但不支持毫无原则的复制粘贴 **(比如:别人addUser, 复制到角色了还addUser,别人的代码格式严谨,复制过来之后歪歪斜斜)** 6. 所有代码均使用IDE自带的代码整理工具进行整理。特殊文件格式需要安装支持插件后进行自动整理。 7. 后端代码提交前需要使用findBugs插件扫描,并处理完扫描出来的问题再提交 8. 后端代码提交前必须严格执行单元测试,并进行冒烟测试,没有问题才可以提交 9. 后端代码提交前必须使用alibaba代码规范扫描工具进行扫描,无问题后可才可以提交 ### 数据权限 查询数据权限时,需注意: 1. 若数据权限数据量小,可以直接使用QueryBean,拼接到in() ```java // 获取该用户有权限项目id ArrayList budgetIds = permissionMapper.findBudgetByUser(userId); // 拼接QueryBean Constraint constraint = Constraint.build() .putField("id") .putOp(Constraint.LOPERATE.IN.getOperation()) .putListValus(Boolean.TRUE, budgetIds) .putValueType(Constraint.DATATYPE.INTEGER.getType()); queryBean.and(constraint); ``` 2. 若数据权限数据量庞大, 例如:该用户可见5000+项目(随时间逐渐增长,5000只是举例),需要分页列表展示,**最好不要使用上面的方式,建议使用right join或者in(子查询)拼接sql。** **原因**: * in(id,id,id,id,....),大量的id拼接花费时间,影响接口性能 * 导致sql过长,可能处在隐患:超过mysql中的max_allowed_packet报错,(5.7版max_allowed_packet默认4M,最大1G,最小1024k) > // sql长度超过mysql中的max_allowed_packet,报错PacketTooBigException Packet for query is too large (49,849,352 > 33,554,432). You can change this value on the server by setting the 'max_allowed_packet' variable. ; Packet for query is too large (49,849,352 > 33,554,432). You can change this value on the server by setting the 'max_allowed_packet' variable.; nested exception is com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (49,849,352 > 33,554,432). You can change this value on the server by setting the 'max_allowed_packet' variable. **优化示例:** 修改前 ```xml ``` 修改后,将查询数据权限的sql拼在一起 ```xml // 方法1、right join修改后,其中 common.data_permission 是查询数据权限的sql,userId需要添加到QueryBean ``` ```xml // 方法2、in(sql) 修改后,其中 common.data_permission 是查询数据权限的sql ```