如果有人问我到底哪一种命名法更好,曾经,我的答案是:驼峰命名法,而现在,我的答案是:当然是下划线命名法,这还用问吗?嘻嘻~~~
选驼峰命名法的理由
- 无论是 Java 还是 C#,业界几乎都采用驼峰命名法,为了保持命名规范的一致性。
- 如果 MySQL 采用下划线命名法
- 在一开始采用 MyBatis 这个框架的时候。由于忽略了 MyBatis 针对驼峰命名与下划线命名的一个转换配置
mapUnderscoreToCamelCase
,在把自定义 SQL 语句查询结果对应到自定义的 POJO 时,为了与 POJO 属性名对应,有两种方式:- POJO 采用驼峰式命名法,自定义的 SQL 语句需要写类似这样的语句
select student_name as studentName
,或者定义 resultMap,类似<result column="student_name" jdbcType="VARCHAR" property="studentName" />
,这将带来额外的工作量和维护成本,而且还容易出错。 - POJO 采用下划线命名法,这样不用写类似
student_name as studentName
的 SQL 语句,也不用额外定义 resultMap,但是,这是重点,与 Java 的命名规范冲突。
- POJO 采用驼峰式命名法,自定义的 SQL 语句需要写类似这样的语句
- 前面两种解决方案都有缺点,那么再看第三种,就是从根本上统一,那就是 MySQL 也采用驼峰式命名法,至于大小写敏感问题,可以通过配置项
lower_case_table_names
解决。
- 在一开始采用 MyBatis 这个框架的时候。由于忽略了 MyBatis 针对驼峰命名与下划线命名的一个转换配置
所以,曾经,我所在项目组在使用 MyBatis 时,MySQL 采用了驼峰式命名法,虽然有效避开了上面提到的两种解决方案的缺点,但是因为这种命名方式有背业界规范,所以一直觉得这并不完美的解决方法。
好的是,在后来研究 MyBatis 的过程中,无意中发现了完美的解决方案,就是上面提到的关键配置,下面会写。
选下划线命名法的理由
- 对于 MySQL 的命名法,业界更多的是下划线命名法,原因是 MySQL 在不同操作系统上有不同的大小写敏感问题(这里就不展开这个话题了)。
- 特意看了一些比较知名的开源项目,MySQL 的命名规范几乎都是下划线命名法。
- 参考大公司的规范,如《阿里巴巴Java开发手册》,也是下划线命名法。
现在的选择:下划线命名法
在得知 MyBatis 的这个配置项 mapUnderscoreToCamelCase
后,关于 MySQL 命名规范,我在新项目中,就坚定的采用下划线命名法了,甚至有把以前 MySQL 采用驼峰命名的项目重构回下划线命名的冲动~~
MyBatis 的配置项:mapUnderscoreToCamelCase
设置启用数据库字段下划线映射到 java POJO 的驼峰式命名属性。该配置项,一般性地,在文件 mybatis-config.xml
中,默认值为 false,将其配置为 true:
- 开启驼峰映射,为自定义的SQL语句服务。
- 针对自定义 SQL 查询结果,对应的自定义 POJO 保持驼峰命名法,查询数据库的 SQL 语句保留原生下划线,不用写 resultMap。
- 即从经典数据库列名 a_column 到经典 Java 属性名 aColumn 的类似映射。
1
2
3
4
5
6<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- other config item -->
</settings>
</configuration>
请注意,MySQL 采用下划线命名法的话,使用 MBG 生成实体的配置项 table
,不需要配置 useActualColumnNames,该配置项默认为 false,如果要配置,其 value 需要设置 false,如下:1
<property name="useActualColumnNames" value="false"/>