Java与MySQL中表、视图及相关实体类的命名最佳实践咨询
JavaFX MVC + JPA 命名最佳实践指南
针对你在JavaFX MVC开发结合JPA时遇到的命名问题,我结合行业规范和实际项目经验给出以下建议:
问题1:数据库视图的命名选择
我不建议把原表名改成citybase、provincebase这种形式,也不推荐用city_vm作为视图名:
- 原表名
city、province语义清晰,直接对应业务实体,修改后缀反而会增加理解成本,其他开发者看到base后缀会疑惑其含义。 vm通常是ViewModel的缩写,属于MVC架构里UI层的概念,和数据库视图完全不是一个范畴,用这个命名会造成概念混淆。
推荐的做法是:
- 保留原表名
city、province不变。 - 针对包含省市区全部数据的视图,使用描述性的蛇形命名,比如
city_with_province、city_detail_view,明确表明这是关联了省份数据的城市视图,一眼就能区分开和原表的差异。
问题2:表、视图、Java类的命名最佳实践
数据库端(MySQL)命名规范
- 表名:坚持用小写蛇形命名,比如
city、province,无需额外后缀,保持语义直接对应业务实体。 - 视图名:同样用小写蛇形,加上明确的标识后缀或前缀,比如
city_province_view、joined_city_province,让所有人都能快速识别这是视图而非物理表。 - 字段名:小写蛇形,外键推荐用关联表的主键名,比如
province_id代替fk_province$city,更符合通用规范,可读性更强。
Java端命名规范
结合你目前的分层设计(实体类处理CRUD、带Property的类处理UI绑定),推荐如下:
- JPA表实体类:用
CityEntity、ProvinceEntity命名(和你现在的做法一致),明确这是映射数据库表的持久化实体;字段名采用Java标准的驼峰命名,比如把city_id改成cityId,通过@Column(name = "city_id")映射到数据库字段,符合Java编码规范。
示例优化后的实体字段:@Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "city_id", nullable = false) private int cityId; // 驼峰命名,映射到数据库的city_id - JPA视图实体类:对应数据库视图的实体,命名为
CityProvinceViewEntity或者CityDetailViewEntity,清晰表明这是映射视图的实体,用于查询展示。 - JavaFX UI绑定类(带Property):推荐命名为
CityViewModel或者CityFxModel,因为这类类的核心作用是为JavaFX视图提供可绑定的属性,属于MVC里的ViewModel层;同时优化Property的获取方法命名,比如把nameStringProperty()改成nameProperty()(JavaFX的标准命名方式,返回StringProperty类型,更简洁统一)。
示例优化后的Property方法:public StringProperty nameProperty() { return name; } public FloatProperty aslFtProperty() { return asl_ft; }
额外小建议
你示例中City类的toString()方法可以直接用name.get(),无需再调用toString(),因为name.get()已经是String类型;另外实体类里的swb_fh和UI类里的swd_fh看起来是笔误,建议统一命名避免后续bug。
内容的提问来源于stack exchange,提问作者alireza azadi
相关产品推荐
相关产品推荐

