(一) 建表规约.................................................................................................................................. 9
1. 【强制】表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint...........9
(1 表示是,0 表示否)。..............................................................................................................9
3. 【强制】表名不使用复数名词。...................................................................................................9
4. 【强制】禁用保留字,如 desc、range、match、delayed 等,请参考 MySQL 官方保留字。.............9
5. 【强制】主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。..........9
6. 【强制】小数类型为 decimal,禁止使用 float 和 double。.............................................................9
7. 【强制】如果存储的字符串长度几乎相等,使用 char 定长字符串类型。........................................9
8. 【强制】varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此
值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。................9
9. 【强制】表必备三字段:id, gmt_create, gmt_modified。...............................................................9
(二) 索引规约................................................................................................................................ 10
1. 【强制】业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。...........................10
2. 【强制】超过三个表禁止 join。需要 join 的字段,数据类型保持绝对一致;多表关联查询时, 保证被
关联的字段需要有索引。...............................................................................................................10
3. 【强制】在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文
本区分度决定索引长度。...............................................................................................................10
4. 【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。.................................11
(三) SQL 语句...............................................................................................................................11
1. 【强制】不要使用 count(列名)或 count(常量)来替代 count(*),count(*)是 SQL92 定义的标准统计行
数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。....................................................................11
2. 【强制】count(distinct col) 计算该列除 NULL 之外的不重复行数,注意 count(distinct col1, col2) 如果
其中一列全为 NULL,那么即使另一列有不同的值,也返回为 0。....................................................11
3. 【强制】当某一列的值全是 NULL 时,count(col)的返回结果为 0,但 sum(col)的返回结果为 NULL,
因此使用 sum()时需注意 NPE 问题。..............................................................................................11
5. 【强制】代码中写分页查询逻辑时,若 count 为 0 应直接返回,避免执行后面的分页语句。.........11
6. 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。...............................................11
7. 【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。.....................................11
8. 【强制】数据订正(特别是删除或修改记录操作)时,要先 select,避免出现误删除,确认无误才能
执行更新语句。............................................................................................................................ 11
9. 【强制】对于数据库中表记录的查询和变更,只要涉及多个表,都需要在列名前加表的别名(或表
名)进行限定。............................................................................................................................ 12
10. 【推荐】SQL 语句中表的别名前加 as,并且以 t1、t2、t3、...的顺序依次命名。.......................12
11. 【推荐】in 操作能避免则避免,若实在避免不了,需要仔细评估 in 后边的集合元素数量,控制在 1
000 个之内。............................................................................................................................... 12
12. 【参考】因国际化需要,所有的字符存储与表示,均采用 utf8 字符集,那么字符计数方法需要注意。
................................................................................................................................................... 12
无事务且不触发 trigger,有可能造成事故,故不建议在开发代码中使用此语句。...............................12
(四) ORM 映射.............................................................................................................................. 12
2. 【强制】POJO 类的布尔属性不能加 is,而数据库字段必须加 is_,要求在 resultMap 中进行字段与属
性之间的映射。............................................................................................................................ 12
3. 【强制】不要用 resultClass 当返回参数,即使所有类属性名与数据库字段一一对应,也需要定义<re
sultMap>;反过来,每一个表也必然有一个<resultMap>与之对应。................................................13
7. 【强制】更新数据表记录时,必须同时更新记录对应的 gmt_modified 字段值为当前时间。............13
五、工程结构...................................................................................................................................... 13
(一) 应用分层................................................................................................................................ 13
1. 【推荐】图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于..........13
3. 【参考】分层领域模型规约:....................................................................................................15
(二) 二方库依赖............................................................................................................................ 15
2. 【强制】二方库版本号命名方式:主版本号.次版本号.修订号.......................................................15
3. 【强制】线上应用不要依赖 SNAPSHOT 版本(安全包除外);正式发布的类库必须先去中央仓库进
行查证,使 RELEASE 版本号有延续性,且版本号不允许覆盖升级。.................................................15
4. 【强制】二方库的新增或升级,保持除功能点之外的其它 jar 包仲裁结果不变。如果有改变, 必须明