一、前言
都说代码是程序员的第二张脸。我们的才华应该表现在设计良好的结构和模式,表现在干净易懂的代码,表现在对空间的尊重,对代码的尊重。代码不是一次性的,需要重复的修改和重构,为未来写点代码。
二、写干净整洁的代码,请尊重空间,请尊重人眼的偏好
- 去除没有用到的类引用。
- 记得格式化代码。
- 不要吝惜废弃的老代码。
- 请不要写冗余无用的代码。
- 请合理运用空行。
- 请不要在两个地方出现完全相同的代码?
- 命名类,方法,变量慎用简写,除非大家都公认。
- 把所有的类变量放到最前面,如果比较多请按用途分组排列,不要把变量散落在大江南北。
- 拆分大的类,大的方法。
三、高效运用注释
- 规范的注释类信息。可以查看一下Java标准库的String.java源码,包括文件名,日期,作者,版本号等信息,用统一的模板。
- 非Java Bean的public方法都需要注释。
- 为不容易理解类变量注释。
- 注释代码段,注释逻辑选择。 如果有if else等逻辑选择的时候,写上判断的依据和结果。
四、Mybatis与SQL规范
- 表名、字段名、索引等数据结构定义大小写: Oracle大写, MySQL小写。名称使用英文+下划线,并控制总长度,如 user_name。
- 表名建议采用“模块标识_”前缀,如 bas_user(如果模块库独立可省略模块名标识)
- 禁止程序中的SQL使用并行计算 /+parallel(t,n)/
- SQL使用标准SQL,避免出现数据库特定的语法
- 未经评审不可直接使用视图、触发器、存储过程 SQL JOIN表数量不超过3张,超过3张表需要经过评审 (拆分成多次单表查询、主表冗余、程序绑定id-name映射、根据条件动态JOIN等)。
- 合理创建索引,并尽量避免不走索引的情况: 如
- LIKE右/任意匹配(‘%xx’, ‘%xx%’)不走索引, 换为“精确匹配=”或固定前缀的左匹配’张%’
- 不等条件(!=、<>、NOT)不走索引,应尽量避免(转换成IN/BETWEEN等)
- IS (NOT) NULL 不走索引,应尽量避免(如字段给定默认值,避免NULL)
- 索引列使用函数或隐式转换都将导致索引失效,如 to_char(create_date,'yyyymmdd') = '20190102'
- 禁止手动拼接SQL语句,利用Mybatis等ORM框架的动态SQL实现。 参数使用#{} (避免${}产生SQL注入问题)。
- 禁止使用数据库处理函数 decode(),改为Java枚举或Map定义,通过id进行绑定 decode(client.TYPE, 1, '私客', 2, '店组公客', 3, '组团公客‘)
- 禁止动态拼接时强加 1=1 之类的写法,如WHERE 1=1。使用Mybatis动态SQL标签实现,如,,
- SQL中的参数类型确保与列定义一致,避免数据库隐式转换开销且无法使用索引,如:
- 列定义为数字类型,参数不用String DEPT_ID = '123’
- 列定义为日期类型,参数要转换为Date日期类型进行比较:
CREATE_TIME <= '2019-04-14 23:59:59’
CREATE_TIME <= to_date('2019-04-14 00:00:00','yyyy-MM-dd HH24:mi:ss’)
- ID主键自增的情况下,按create_time排序改为按ID排序,效果一样效率更高