单元测试
1.单元测试应该是全自动执行的,而非交互式的,应使用assert语句来验证结果而不是sout后进行人眼验证
2.为了保证单元测试可靠且便于维护,单元测试用例之间不能互相调用
3.单元测试是可重复执行的,不能受到外界环境的影响
4.单元测试代买必须写在src/test/java的工程目录下,这样在源码构建时会跳过此目录,单元测试框架则会默认扫描该目录
5.对于数据库相关的查询,更新,删除等操作,不能假设数据库里的数据是存在的,或者直接操作数据库把数据插入进去,应使用程序插入或者导入数据的方式来准备数据
6.与数据库相关的单元测试,可以设定自动回滚机制,不给数据库造成脏数据
MySQL数据库
建表
1.表达是与否概念的字段,必须使用is_xxx的方式命名,且1代表是,0代表有
2.表名,字段名,必须使用小写字母或数字,数字不能开头,精致两个下划线中间只有数字
3.表名不使用复数名词
4.不能使用MySQL官方的保留字
5.主键索引名为pk_字段名,位移所有名为uk_字段名,普通索引名为idx_字段名
6.小数类型为decimal,不能使用float和double
7.varchar是可变字符串,不预先分配存储空间,长度不能超过5000,如果储存长度大于此值,应定义字段类型为text,独立出来一张表,用主键去对应它
8.表中必须有三个字段,id,gmt_create,gmt_modified
9.表的最好命名是业务名称_表的作用
10.库名与应用名保持一致.
11.字段允许冗余,但必须遵循不是频繁修改的字段,不是varchar超长的字段,也不能是text字段
索引
1.业务中具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引
2.超过三个表禁止join,join的字段必须要有索引
3.在varchar字段建立索引时,必须指定索引长度,没必要对全字段建立索引,可以采用count(distinct left(列名,索引长度))/count(*)的方式来确定此长度
4.页面搜索禁止左模糊或全模糊
5.order by的场景,注意索引的有序性,order by最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现file_sort的情况
6.利用覆盖索引来进行查询操作,避免回表
7.explain的结果至少达到range级别,要求是ref级别
8.建组合索引的时候,区分度最高的在最左边
9.防止因字段不同造成的隐式转换,导致索引失效
sql
1.不要使用count(类名)来替代count(*),count(*)会统计NULL的行,count(列名)则不会
2.count(distinct col)计算除NULL之外的不重复行数
3.当某一列值全为NULL,count(col)的返回结果为0,但sum(col)的返回结果为NULL
4.使用ISNULL()来判断是否为NULL值,这是由于NULL与任何值的比较都是NULL而不会返回true或false
5.在代码中写分页查询逻辑时,若count为0,应直接返回,避免执行后面的分页语句
6.不能使用外键与级联,一切外键的概念在应用层解决
7.数据订正的时候需要线select,再进行删除或修改
8.in操作能避免就避免,如果避免不了,控制in后的集合元素数量在1000个之内
ORM
1.不要使用*作为查询的字段列表
2.POJO类的布尔属性不能加is,而数据库字段必须加is_,要求在resultMap中进行字段与属性之间的映射
3.不要用resultCLass作为返回参数,即使所有类属性名与数据库字段一一对应,也需要定义
4.SQL.xml配置参数时使用#{},#param#,不要使用${},会产生sql注入问题
5.不允许直接使用HashMap与Hashtable作为查询结果集的输出
6.更新数据表记录的时候,必须同时更新记录对应的gmt_modified字段值作为当前时间
7.不要写一个大而全的数据更新接口,执行SQL时不要更新没有被改动的字段
8.<isEqual>中的compareValue是与属性值对比的常量,一般是数字,<isNotEmpty>表示不为空且不为null的时候执行,<isNotNull>表示不为null值的时候执行