说明
本项目最初想要解决数据库表名、字段名的命名法与 java 的类、属性命名法不一致带来的一系列问题。
当然,本项目的 MBG 扩展类还做了一些其他事情,比如方便分表时做表名替换,更详细的,请参考: MBG 扩展类 module
曾尝试将数据库表名、字段名也采用驼峰命名法。
现在已经改成:
数据库表名、字段名保持下划线命名法。
针对自定义 SQL 查询结果,对应的自定义 POJO 保持驼峰命名法,查询数据库的 SQL 语句保留原生下划线,并且不用写 resultMap。
做到了 Java 规范与 MySQL 命名规范不一致的完美兼顾。
已添加查询示例,不过仅仅是查询示例,没有考虑到项目架构的合理性。实际项目不会在 web 层直接调用 dal 层,实际项目会有业务层和接口层。
有关 MySQL 命名规范,请参考:MyBatis 项目中,有关 MySQL 命名规范,用驼峰命名法与下划线命名法的取舍,请关注这篇文章提到的 mapUnderscoreToCamelCase 配置项。
运行示例
安装 MySQL,执行 boot-create-table-property/resources/schema.sql 脚本。
修改 boot-create-table-property/resources/application.yml 中的数据库连接参数。
运行启动项目:boot-create-table-property。
如果看到初始化的部门信息,则表示运行成功。
自行测试
添加、修改表结构。
参照项目根目录下的:generatorConfig.xml,重新生成 mapper
参照 demo.domain.dal.service.SysDeptDalService.getSysDeptList() 实现数据库查询方法。
参照 table.property.controller.QueryDatabaseTestController.getSysDeptList() 运行查询测试。
有关数据库表名、字段名使用下划线命名法还是驼峰命名法的思考
更新时间:2019-05-29
近期,又研读了一次《阿里巴巴Java开发手册(详尽版)》(从这里可以下载),又思考了关于 MySQL 的表名、字段名的命名范围。
打算在以后的新项目中完全遵循《阿里巴巴Java开发手册(详尽版)》的规范。
与本仓库的 MySQL 表名、字段名,采用的是驼峰命名法(CamelCase),与《阿里巴巴Java开发手册(详尽版)》的规范冲突,需要改为下划线命名法(UnderScoreCase)。
关于数据库表名、字段名的命名规范,是要采用与 Java 代码的字段名和方法名一样的驼峰命名法(CamelCase)还是采用业界绝大多数团队使用的下划线命名法(UnderScoreCase),仁者见仁,智者见智。
作为团队规范的制定者,需要综合考虑各个方面的因素,之前我在面对这个问题的时候,考虑到数据库的每一张表都会对应一个 POJO,如果表字段是下划线命名法,为了与数据库对应,表对应的实体类(POJO)也得下划线命名,这就导致了同样是 java 类的命名规范的不一致性,在写代码的时候很别扭(当时对 MyBatis 不熟悉,其实有解决方案,继续往下看)。
现在如果有一个方案,在既保持数据库表与字段采用下划线命名法的同时,对应实体(POJO)又是驼峰命名法,这样既可以兼顾数据库的业界规范,又可以兼顾 Java 开发的业界规范,那就太完美了,还好,这个方案是有的。
请继续往下看。
解决方案
更新时间:2019-06-18
针对数据库字段使用下划线命名法,生成相应实体时,使用 java 普遍使用的驼峰命名法的配置,将 boot-create-table-property 项目的 application.yml 的配置 flagUseActualColumnNames 改为 false:
# 是否使用原始字段名
flagUseActualColumnNames: false
如果设置为 true,会生成如下属性:
设置为 false 则不会生成该属性,没有显示指定该属性值时,该属性默认为 false